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 pause
hacer que su teléfono vibre de acuerdo con estas palabras clave.
Tarea
Crear un pequeño programa que acepta una cadena de long
, short
y pause
y da salida a otra cadena que representa el sonido fonético de un teléfono vibra;Rrrr - Rr
long
los sonidos son Rrrr
short
sonidos son Rr
(la carcasa importa)
pause
es 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 yAND
lo 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
:-)\xef
y\xa6
son.o
y.&
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 6
truco 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
,short
opause
y intercambia los resultados paraRrrr
,Rr
o-
respectivamente.Esto se imprime con
-
relleno con espacios como separador, haciendo coincidir la salida deseada.fuente
scan(,'') %in% c('long','short','pause')
a %in% b
comprueba si las entradas en ela
está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 deTRUE
s.[
, 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
Rrrr
lugar de cualquier variante de 4 letras).Código anterior:
fuente
Mmm
yMm
es 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++,*a
en*++a
que salvar dos bytes, y tomar ventaja de la definición vaga "sonido", para usar*a
en 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
@
sMmmm
yMm
conRrrr
yRr
, 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/ / - /g
entrarProbablemente se puede acortar ...
fuente
e
bandera 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
SPACE
separated string, as is output.La pregunta en sí no menciona un
SPACE
requisito, 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
→R
o
,n
,g
→r
p
→-
fuente
Sed, 50 bytes
Toma entrada de
stdin
, imprime astdout
Editar - 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
i
to turn into a full program that reads from STDIN.Uses
&6
like 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
\°
withx
and"-"
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.short
becomeso
long
becomesog
pause
becomesp
Try it online!
fuente
V, 32 bytes
Try it online!
fuente
Python 3, 66 bytes
Try it online!
fuente