En Vim, puede repetir un comando precediéndolo con un número, como 3dd
es equivalente a dd dd dd
. Bueno, este patrón repetitivo no está restringido a los comandos de Vim. La cadena también se puede replicar de esta manera.
Especificación:
Dada una cadena, que consta de solo dígitos, caracteres alfabéticos (mayúsculas y minúsculas) y espacios, con una nueva línea final opcional, como entrada, escriba un programa que haga el siguiente trabajo:
Cada "palabra" consta de dígitos y alfabetos. Si una letra va precedida de un número (puede haber más de un dígito en un número o el número es cero), repita esa letra para los tiempos dados. Por ejemplo:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
Las palabras están separadas por espacios. Hay un máximo de un espacio entre cada dos palabras adyacentes.
Fácil, verdad? Aquí están las cosas adicionales:
Si hay un número antes del espacio, repita la siguiente palabra para los tiempos dados. El número siempre se adjuntará al final de la palabra anterior o al comienzo de la cadena. Ejemplo:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c b
Si se debe repetir una palabra vacía, no genere múltiples espacios seguidos. Aplastarlos:
a3 0x2 b -> a b b # NOT 'a b b'
En otras palabras, su programa nunca debería generar dos espacios juntos.
La entrada nunca está vacía, pero no es necesario que la salida no esté vacía:
0 3x -> (empty)
La entrada y la salida se pueden tomar de cualquier manera preferida. También es aceptable una función que toma datos de argumentos y proporciona resultados a través de valores de retorno.
Si es un programa, no debe salir con error (es decir, el valor de retorno es cero).
Los números siempre son decimales y nunca comienzan con un cero, a menos que el número en sí sea cero, en cuyo caso solo hay un cero. Es decir, no necesita considerar
077a
o000a
dar como entrada.Todos los números son menores a 2 ^ 31 (2,147,483,648). La longitud máxima de salida es inferior a 2 ^ 32 (4,294,967,296) bytes.
El programa puede opcionalmente generar un espacio final y / o una nueva línea final. Esos espacios y líneas nuevas no afectan la validez de la salida. Incluso si la salida correcta debe estar vacía, se calificará una salida de un espacio seguido de una nueva línea.
En resumen, una entrada válida coincide con esta expresión regular:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
Y para una salida válida:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
Ejemplos de casos de prueba:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
Este es un código de golf , por lo que gana el programa más corto en bytes en cada idioma.
a3 0xc b
->a c c c b
, ya que originalmente tenía un código que funcionó para todos los casos de prueba anteriores, pero no funcionó correctamente para eso.Respuestas:
JavaScript (Node.js) ,
102129110106 bytesPruébalo en línea!
Gracias por @Arnauld por -4 bytes.
fuente
Perl 6, 88 bytes
Pruébalo
Expandido:
La
~(…).words
combinación elimina espacios extraños, lo cual es útil si se elimina una "palabra".fuente
Python 2,
286275260257238 bytes-19 bytes gracias a los ovs
f
toma una cadena como argumento e imprime la cadena formateada.Aquí hay una respuesta con los casos de prueba.
Código sin golf:
Todavía estoy trabajando en mejoras.
fuente
exec
, ya que es la única línea en la función.Perl 5 , 77 + 1 (
-p
) = 78 bytesPruébalo en línea!
fuente
Limpio ,
443... 306 bytesPruébalo en línea!
fuente
Lua , 113 bytes
Pruébalo en línea!
fuente