Recientemente recibió un teléfono nuevo, pero no le gusta la forma en que vibra, ha decidido que desea crear sus propios patrones de vibración. Entonces, has escrito un programa donde usaste las palabras clave long,short y pausehacer que su teléfono vibre de acuerdo con estas palabras clave.
Tarea
Crear un pequeño programa que acepta una cadena de long, shorty pausey da salida a otra cadena que representa el sonido fonético de un teléfono vibra;Rrrr - Rr
longlos sonidos son Rrrr
shortsonidos son Rr
(la carcasa importa)
pausees un guión -
todos los sonidos están delimitados por guión con espacios circundantes' - '
Casos de prueba
entrada: long long short long short
salida:Rrrr - Rrrr - Rr - Rrrr - Rr
entrada: long long long short short short
salida:Rrrr - Rrrr - Rrrr - Rr - Rr - Rr
entrada: short short short pause short short short
salida:Rr - Rr - Rr - - - Rr - Rr - Rr
entrada: long short short long long pause short short
salida:Rrrr - Rr - Rr - Rrrr - Rrrr - - - Rr - Rr
Esta es una pregunta de código de golf , por lo que las respuestas se puntuarán en bytes, ganando la menor cantidad de bytes.

-? Este es el caso en su ejemplo, pero no se especifica en ninguna parte.Respuestas:
Pyke ,
2220 bytesPruébalo aquí!
El quid de esta respuesta es la transformación de
["long", "short", "pause"]en[4, 2, 0]. Obtiene el punto de código de la primera letra de cada palabra yANDlo marca con 6. Por casualidad, se transforma en los valores que estamos buscando. (Busqué algunas otras soluciones más largas antes de encontrar esta). Una vez hecho esto, podemos transformar aún más esa lista de entradas["RRRR", "RR", ""]multiplicando nuestro int por el"R"cual luego se convierte["RRRR", "RR", "-"]y finalmente se convierte en una carcasa para obtener["Rrrr", "Rr", "-"]. Luego nos unimos a la lista resultante por" - "fuente
j" - "m|*\M.&Chd6\-c:-)\xefy\xa6son.oy.&respectivamente. Es un cambio compatible con versiones anteriores donde, si se establece el bit alto, se ejecuta como los comandos de 2 bytes anteriores. Lo escribo de esta manera para que sea más fácil para el lector y porque técnicamente Pyke ya no usa una página de códigos y no quiero tener que insertar bytes aleatorios que no funcionanJavaScript,
7063 bytes2 bytes guardados gracias a Luke
Pruébalo en línea!
fuente
[]s!Haskell ,
716659 bytesPruébalo en línea!
Oh cierto,
=<<es concatMap.Aprovecha el hecho de que
"long"y"short"ambos tienen la cartao.fuente
f=las funciones sin puntos estén permitidas sin asignación(>>=(\case 'o'->"Rr";'n'->"rr";'p'->"-";' '->" - ";_->""))JavaScript (ES6),
6559 bytesfuente
05AB1E ,
33272521 bytesPruébalo en línea!
Explicación
Guardado 3 bytes usando el
AND 6truco de la respuesta pyke de muddyfishfuente
Python 2 ,
766964 bytesPruébalo en línea!
Suplentes:
Python 2 ,
7669 bytesPruébalo en línea!
Python 2 , 69 bytes
Pruébalo en línea!
fuente
Mathematica, 81 bytes
Pruébalo en línea!
fuente
Retina ,
3129 bytes1 byte guardado gracias a Dom Hastings
1 byte guardado gracias a Neil
Pruébalo en línea!
Este es un enfoque diferente a la respuesta de @ DomHastings .
fuente
Perl 5 , 39 bytes
Código de 37 bytes + 2 para
-pa.Pruébalo en línea!
fuente
R , 77 bytes
Toma la entrada a través de STDIN, comprueba si la entrada coincide con
long,shortopausey intercambia los resultados paraRrrr,Rro-respectivamente.Esto se imprime con
-relleno con espacios como separador, haciendo coincidir la salida deseada.fuente
scan(,'') %in% c('long','short','pause')a %in% bcomprueba si las entradas en elaestán presentes enb, mientras quematch(a, b)devuelve los índices reales de las coincidencias. Como podemos suponer que la entrada es válida, usar%in%solo devolvería un vector deTRUEs.[, se interpreta como[which(bool) == TRUE], lo que en su ejemplo sería[c(1,2,3)], lo que a su vez da la salida correcta.sep=' - 'que pueda usars=' - 'por 2 bytes menosRöda ,
735747464044 bytesPruébalo en línea!
+4 bytes debido al cambio de regla (debe usarse en
Rrrrlugar de cualquier variante de 4 letras).Código anterior:
fuente
MmmyMmes 1 byte más corto.C (gcc) ,
937776 bytes-2 bytes gracias a Scepheo!
-1 byte gracias a Cyoce!
Toma un ** carácter NULL terminado ** o equivalente como entrada.
Pruébalo en línea!
Explicaciones:
fuente
a++,*aen*++aque salvar dos bytes, y tomar ventaja de la definición vaga "sonido", para usar*aen lugar de"Rrrr"salvar a otros cuatro bytes.R , 72 bytes
Toma datos de stdin, imprime en stdout.
Pruébalo en línea!
fuente
Lote, 88 bytes
Toma entrada en STDIN. Desafortunadamente, la sobrecarga del bucle cuesta 26 bytes, por lo que estos son reemplazos aburridos.
fuente
@sMmmmyMmconRrrryRr, sería bueno actualizar su respuesta c:Retina , 31 bytes
-1 byte gracias a @ fergusq !
Pruébalo en línea!
fuente
PHP, 113 bytes
Pruébalo en línea!
Primer intento de golf de código, ¡así que probablemente haya muchas optimizaciones disponibles!
fuente
Vim (52 bytes)
:s/long/Rrrr/ge|s/short/Rr/ge|s/pause/-/ge|s/ / - /gentrarProbablemente se puede acortar ...
fuente
ebandera al finals/[^ -]/r/, capitalize the first R after every space, trim four-r to two-r) came out longer.Excel, 100 bytes
Per examples, Input is
SPACEseparated string, as is output.La pregunta en sí no menciona un
SPACErequisito, lo que permite una solución de 97 bytes un poco más corta :fuente
AutoIt , 145 bytes
(Auto es realmente una mala elección para el golf de código, hice mi mejor esfuerzo para hacerlo lo más pequeño posible)
fuente
Alice , 37 bytes
Pruébalo en línea!
Explicación
Este programa realiza las siguientes sustituciones:
l,h→Ro,n,g→rp→-fuente
Sed, 50 bytes
Toma entrada de
stdin, imprime astdoutEditar - guardado 2 bytes
Sed, 40 bytes
Copiando la idea de la respuesta de Nitrodon
Editar: guardado otros 2 bytes
fuente
Python 2, 69 bytes
Try it online!
Port of my Pyke answer
fuente
Paradoc (v0.2.10), 21 bytes (CP-1252)
Try it online!
Takes a string on the stack and results in a string on the stack. Prepend
ito turn into a full program that reads from STDIN.Uses
&6like the Pyke answer and everybody else, but joins the tokens together slightly differently, by adding a"-"token after each noise, deleting the last one, and then joining these tokens by spaces. Seems to save a byte over joining by" - ".Explanation:
v0.2.11 will support shaving two more bytes by replacing
\°withxand"-"with'-.fuente
SOGL V0.12, 28 bytes
Try it Here!
fun fact: if it was allowed to delimit with
-or-it'd be a byte shorterfuente
Ruby, 67 bytes
This is Johan Karlsson's JavaScript solution ported to Ruby. If you like this answer, you should upvote Johan's answer.
The key idea is to compare the word strings
'short', etc. to a single character in order to distinguish between words.Or, in alphabetical order:
Try it online!
fuente
Ruby, 78 bytes
The only important parts of the input are
p,o,g, and space... ignore the rest.shortbecomesolongbecomesogpausebecomespTry it online!
fuente
V, 32 bytes
Try it online!
fuente
Python 3, 66 bytes
Try it online!
fuente