Recientemente me he dado un poco de nostalgia en forma de Bookworm Deluxe:
En caso de que no lo hayas visto antes, es un juego de palabras donde el objetivo es conectar fichas adyacentes para formar palabras. Para determinar si una cadena es una palabra válida, la compara con su diccionario interno, que se almacena en un formato comprimido que se ve así:
aa
2h
3ed
ing
s
2l
3iis
s
2rdvark
8s
4wolf
7ves
Las reglas para desempacar el diccionario son simples:
Lea el número al comienzo de la línea y copie esa cantidad de caracteres desde el comienzo de la palabra anterior. (Si no hay un número, copie tantos caracteres como lo hizo la última vez).
Agregue las siguientes letras a la palabra.
Entonces, nuestra primera palabra es aa
, seguida de 2h
, que significa "copiar las dos primeras letras de aa
y agregar h
", formando aah
. Luego se 3ed
convierte aahed
, y como la siguiente línea no tiene un número, copiamos 3 caracteres nuevamente para formar aahing
. Este proceso continúa durante el resto del diccionario. Las palabras resultantes de la entrada de muestra pequeña son:
aa
aah
aahed
aahing
aahs
aal
aaliis
aals
aardvark
aardvarks
aardwolf
aardwolves
Su desafío es realizar este desempaquetado en la menor cantidad de bytes posible.
Cada línea de entrada contendrá cero o más dígitos 0-9
seguidos de una o más letras minúsculas a-z
. Puede tomar entrada y dar salida como una lista de cadenas o como una sola cadena con palabras separadas por cualquier carácter que no sea 0-9
/ a-z
.
Aquí hay otro pequeño caso de prueba con algunos casos extremos no cubiertos en el ejemplo:
abc cba 1de fg hi 0jkl mno abcdefghijk 10l
=> abc cba cde cfg chi jkl mno abcdefghijk abcdefghijl
También puede probar su código en el diccionario completo: entrada , salida .
0
tendrá0
s iniciales ?locate
programa usa este tipo de codificación en los nombres de ruta.Respuestas:
Vim, 57 bytes
Pruébalo en línea!
fuente
<H<G
lugar de la última sustitución?<
solución sea indeseable suficientes veces.:%s/ *
lugar de la última sustitución para guardar dos bytes.JavaScript (ES6),
66 6261 bytesPruébalo en línea!
Comentado
fuente
Perl 6 ,
5048 bytes-2 bytes gracias a nwellnhof
Pruébalo en línea!
Un puerto de la solución de Arnauld . Hombre, eso
R||
truco fue una montaña rusa de 'Creo que esto podría ser posible', 'nah, es imposible', 'quizás un poco posible' y finalmente '¡ajá!'Explicación:
La
$l [R||]=~$/
parte se traduce aproximadamente como$l= ~$/||+$l
... pero tiene la misma cantidad de bytes:(
. Originalmente, guardaba bytes usando una variable anónima, pormy$l
lo que desapareció pero eso no funciona ya que el alcance ahora es la sustitución, no elmap
bloque de código. Oh bien. De todos modos,R
es el metaoperador inverso, por lo que invierte los argumentos de||
, por lo que a la$l
variable se le asigna el nuevo número (~$/
) si existe, de lo contrario se vuelve a .Podría ser de 47 bytes si Perl 6 no arrojó un error de compilación algo redundante
=~
.fuente
Ruby ,
494543 bytesPruébalo en línea!
Explicación
fuente
C,
6557 bytesPruébalo en línea!
Explicación:
fuente
brainfuck , 201 bytes
Pruébalo en línea!
Requiere una nueva línea al final de la entrada. Una versión sin este requisito es 6 bytes más larga:
brainfuck , 207 bytes
Pruébalo en línea!
Ambas versiones suponen que todos los números son estrictamente menores que 255.
Explicación
La cinta se presenta de la siguiente manera:
La celda "número" es igual a 0 si no se ingresan dígitos, y n + 1 si se ingresa el número n. La entrada se toma en la celda marcada "85".
fuente
Python 3.6+,
172195156123122121104 bytesPruébalo en línea!
Explicación
Me derrumbé y usé expresiones regulares. Esto ahorró al menos 17 bytes. :
Cuando la cadena no comienza con un dígito, la longitud de esta cadena será
0
. Esto significa que:será
n
sit
está vacío, y de loint(t)
contrario.elimina el número del que se encontró la expresión regular
s
(si no se encuentra un número, eliminará los0
caracteres, dejándolos sins
truncar) y reemplaza todos, excepto los primerosn
caracteres de la palabra anterior, con el fragmento de palabra actual; y:da salida a la palabra actual.
fuente
Haskell,
8281 bytesToma y devuelve una lista de cadenas.
Pruébalo en línea!
Editar: -1 byte gracias a @Nitrodon.
fuente
Japt,
191817 bytesInicialmente inspirado en la solución JS de Arnauld .
Intentalo
fuente
Jalea , 16 bytes
Pruébalo en línea!
Cómo funciona
fuente
Python 2 , 118 bytes
Pruébalo en línea!
fuente
Retina 0.8.2 , 69 bytes
Pruébalo en línea! Link incluye casos de prueba más difíciles. Explicación:
Para todas las líneas que comienzan con letras, copie el número de la línea anterior, haciendo un bucle hasta que todas las líneas comiencen con un número.
Convierte el número a unario.
Use grupos de equilibrio para reemplazar todos los
1
s con la letra correspondiente de la línea anterior. (Esto resulta ser un poco más golfístico que reemplazar todas las carreras de1
s.)fuente
Rojo , 143 bytes
Pruébalo en línea!
fuente
Java (JDK) , 150 bytes
Pruébalo en línea!
fuente
Groovy , 74 bytes
Pruébalo en línea!
Explicación:
fuente
Jalea , 27 bytes
Pruébalo en línea!
fuente
Perl 5
-p
,4541 bytesPruébalo en línea!
Explicación:
fuente
Groovy ,
10399 bytesPruébalo en línea!
fuente
05AB1E ,
201917 bytesPruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Lisp común, 181 bytes
Pruébalo en línea!
Sin golf:
Como de costumbre, los identificadores largos de Common Lisp lo hacen no particularmente adecuado para PPCG.
fuente
Python 2 ,
10110099 bytesPruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 134 bytes
Pruébalo en línea!
-9 bytes gracias a @ASCIIOnly!
Menos golf ...
fuente
l=n>0?n:l
al=m>0?n:l
porque no estaba recogiendo el caso cuando una línea comenzó con cero (0jkl
). ¡Gracias por el consejo!Scala ,
226129102 bytesGracias @ ASCII-only por su trabajo aquí (y por la respuesta Groovy).
Pruébalo en línea!
fuente