Você recentemente adquiriu um telefone novo, mas não gosta da maneira como ele vibra; decidiu que deseja criar seus próprios padrões de vibração. Então, você escreveu um programa onde você usou as palavras-chave long
, short
e pause
para fazer o telefone vibrar de acordo com essas palavras-chave.
Tarefa
Criar um pequeno programa que aceita uma série de long
, short
e, pause
e produz uma outra string representando o som fonético de um telefone vibrando;Rrrr - Rr
long
sons são Rrrr
short
sons são Rr
(Casing importa)
pause
é um traço -
todos os sons são delimitados por traços com espaços ao redor' - '
Casos de teste
entrada: long long short long short
saída:Rrrr - Rrrr - Rr - Rrrr - Rr
entrada: long long long short short short
saída:Rrrr - Rrrr - Rrrr - Rr - Rr - Rr
entrada: short short short pause short short short
saída:Rr - Rr - Rr - - - Rr - Rr - Rr
entrada: long short short long long pause short short
saída:Rrrr - Rr - Rr - Rrrr - Rrrr - - - Rr - Rr
Esta é uma questão de código-golfe, para que as respostas sejam pontuadas em bytes, com o menor número possível de bytes.
-
? Este é o caso do seu exemplo, mas não está especificado em nenhum lugar.Respostas:
Pyke ,
2220 bytesExperimente aqui!
O cerne desta resposta é a transformação de
["long", "short", "pause"]
em[4, 2, 0]
. Ele obtém o ponto de código da primeira letra de cada palavra eAND
o coloca com 6. Por uma coincidência feliz, ele se transforma nos valores que estamos procurando. (Pesquisei várias outras soluções antes de encontrar esta). Uma vez feito isso, podemos transformar ainda mais essa lista de ints["RRRR", "RR", ""]
multiplicando nosso int pelo"R"
qual, então, se transforma em["RRRR", "RR", "-"]
e, finalmente, o título da caixa que obtém["Rrrr", "Rr", "-"]
. Em seguida, ingressamos na lista resultante" - "
fonte
j" - "m|*\M.&Chd6\-c
:-)\xef
e\xa6
são.o
e.&
respectivamente. É uma alteração compatível com versões anteriores, onde, se o bit alto estiver definido, ele será executado como os antigos comandos de 2 bytes. Eu estou escrevendo desta forma para tornar mais fácil para o leitor e porque Pyke tecnicamente não usa uma página de código mais e eu não quero ter que inserir bytes aleatórios que não funcionamJavaScript,
7063 bytes2 bytes salvos graças a Luke
Experimente online!
fonte
[]
!Haskell ,
716659 bytesExperimente online!
Ah, certo,
=<<
é concatMap.Tira proveito do fato de que
"long"
e"short"
ambos têm a letrao
.fonte
f=
funções livre de ponto são permitidos sem atribuição(>>=(\case 'o'->"Rr";'n'->"rr";'p'->"-";' '->" - ";_->""))
JavaScript (ES6),
6559 bytesfonte
05AB1E ,
33272521 bytesExperimente online!
Explicação
Economizou 3 bytes usando o
AND 6
truque da resposta pyke de muddyfishfonte
Python 2 ,
766964 bytesExperimente online!
Suplentes:
Python 2 ,
7669 bytesExperimente online!
Python 2 , 69 bytes
Experimente online!
fonte
Mathematica, 81 bytes
Experimente online!
fonte
Retina ,
3129 bytes1 byte economizado graças a Dom Hastings
1 byte economizado graças a Neil
Experimente online!
Essa é uma abordagem diferente da resposta do @ DomHastings .
fonte
Perl 5 , 39 bytes
Código de 37 bytes + 2 para
-pa
.Experimente online!
fonte
R , 77 bytes
Toma entrada através STDIN, verifica se a entrada corresponde
long
,short
oupause
e permuta os resultados paraRrrr
,Rr
ou-
respectivamente.Isso é impresso com
-
preenchimento com espaços como separador, correspondendo à saída desejada.fonte
scan(,'') %in% c('long','short','pause')
a %in% b
verifica se as entradas noa
estão presentes emb
, enquantomatch(a, b)
retorna os índices reais das correspondências. Como podemos assumir que a entrada é válida, usar%in%
retornaria apenas um vetor deTRUE
s.[
, ele é interpretado como[which(bool) == TRUE]
, como seria o seu exemplo[c(1,2,3)]
, que por sua vez fornece a saída correta.sep=' - '
você pode usars=' - '
para 2 bytes menosRöda ,
735747464044 bytesExperimente online!
+4 bytes devido a alteração de regra (deve usar
Rrrr
vez de qualquer variante de 4 letras).Código anterior:
fonte
Mmm
eMm
é 1 byte mais curto.C (gcc) ,
937776 bytes-2 bytes graças ao Scepheo!
-1 byte graças a Cyoce!
Toma um caractere NULL ** terminado ou equivalente como uma entrada.
Experimente online!
Explicações:
fonte
a++,*a
para*++a
salvar dois bytes, e aproveitar a definição vaga "som" para usar*a
em vez de"Rrrr"
salvar mais quatro bytes.R , 72 bytes
Pega a entrada de stdin, imprime em stdout.
Experimente online!
fonte
Lote, 88 bytes
Recebe entrada em STDIN. Infelizmente, a sobrecarga do loop custa 26 bytes, portanto, são apenas substituições chatas.
fonte
@
sMmmm
eMm
comRrrr
eRr
, seria bom atualizar sua resposta c: #Retina , 31 bytes
-1 byte graças a @ fergusq !
Experimente online!
fonte
PHP, 113 bytes
Experimente online!
Primeira tentativa de código de golfe, provavelmente há muitas otimizações disponíveis!
fonte
Vim (52 bytes)
:s/long/Rrrr/ge|s/short/Rr/ge|s/pause/-/ge|s/ / - /g
entrarProvavelmente pode ser reduzido ...
fonte
e
bandeira no finals/[^ -]/r/
maiúscula o primeiro R depois de cada espaço, aparar de quatro para dois) saiu por mais tempo.Excel, 100 bytes
Por exemplos, Entrada é
SPACE
sequência separada, assim como saída.A pergunta em si não menciona um
SPACE
requisito, permitindo uma solução de 97 bytes um pouco mais curta :fonte
AutoIt , 145 bytes
(O AutoIt é uma péssima escolha para o código de golfe, tentei o meu melhor para torná-lo o menor possível)
fonte
Alice , 37 bytes
Experimente online!
Explicação
Este programa faz as seguintes substituições:
l
,h
→R
o
,n
,g
→r
p
→-
fonte
Sed, 50 bytes
Recebe entrada
stdin
, imprime emstdout
Editar - salvou 2 bytes
Sed, 40 bytes
Copiando a ideia da resposta de Nitrodon
Editar: salvou outros 2 bytes
fonte
Python 2 , 69 bytes
Experimente online!
Porto da minha resposta Pyke
fonte
Paradoc (v0.2.10), 21 bytes (CP-1252)
Experimente online!
Pega uma sequência na pilha e resulta em uma sequência na pilha. Anexar
i
para se transformar em um programa completo que leia STDIN.Usa
&6
como a resposta do Pyke e todos os outros, mas une os tokens de maneira um pouco diferente, adicionando um"-"
token após cada ruído, excluindo o último e juntando esses tokens por espaços. Parece salvar um byte ao ingressar no" - "
.Explicação:
A v0.2.11 suportará a depilação de mais dois bytes substituindo
\°
porx
e"-"
por'-
.fonte
SOGL V0.12 , 28 bytes
Experimente aqui!
fato interessante: se foi permitido delimitar com
-
ou-
seria um byte mais curtofonte
Ruby , 67 bytes
Esta é a solução JavaScript de Johan Karlsson portada para Ruby. Se você gosta desta resposta, deve votar novamente na resposta de Johan.
A idéia principal é comparar as sequências de palavras
'short'
, etc., com um único caractere, a fim de distinguir entre as palavras.Ou, em ordem alfabética:
Experimente online!
fonte
Ruby , 78 bytes
As únicas partes importantes da entrada são
p
,o
,g
, e no espaço ... ignorar o resto.short
torna-seo
long
torna-seog
pause
torna-sep
Experimente online!
fonte
V , 32 bytes
Experimente online!
fonte
Python 3 , 66 bytes
Experimente online!
fonte