Cuando era más joven, solía jugar un juego de palabras llamado Word chain . Fue muy simple. El primer jugador elige una palabra; el siguiente jugador dice otra palabra que comienza con la misma letra con la que terminó la palabra anterior. ¡Esto continúa para siempre hasta que alguien se rinde! El truco es que no puedes usar la misma palabra dos veces (¡a menos que todos olviden que esa palabra incluso se usó! Por lo general, jugamos con cierto tema para hacerlo más difícil. Pero ahora, quiero que hagas un programa para hacer esto por mí.
Desafío
Escriba un programa o función completa para encontrar todas las cadenas de palabras más largas posibles utilizando un conjunto de palabras dado y comience la palabra.
Este es el código de golf , por lo que gana el código más corto.
Entrada
Hay dos entradas: una lista y una palabra de inicio. La palabra de inicio no estará en la lista. Todas las entradas son minúsculas ASCII y la lista no contendrá palabras duplicadas.
Salida
Todas las secuencias de palabras de la lista de manera que:
La palabra de inicio es la primera palabra en la secuencia.
Cada palabra posterior comienza con la misma letra que la última letra de la palabra anterior.
La longitud de la secuencia es la más larga posible .
Si hay varias secuencias más largas, envíe todas ellas.
La secuencia no necesariamente necesita contener todas las palabras de la lista. A veces eso no es posible (ver casos de prueba). De nuevo, ¡ninguna palabra se puede usar dos veces!
Casos de prueba
In: [hello, turtle, eat, cat, people] artistic
Out: [artistic, cat, turtle, eat]
In: [lemonade, meatball, egg, grape] ham
Out: [ham, meatball, lemonade, egg, grape]
In: [cat, cute, ewok] attic
Out: [attic, cute, ewok]
In:[cat, cute, ewok, kilo, to, otter] attic
Out: [attic, cute, ewok, kilo, otter]
In:[cat, today, yoda, attic] ferret
Out: [ferret, today, yoda, attic, cat]
In: [cancel, loitering, gnocchi, improv, vivic, child, despair, rat, tragic, chimney, rex, xylophone] attic
Out: [[attic, child, despair, rat, tragic, cancel, loitering, gnocchi, improv, vivic, chimney], [attic, cancel, loitering, gnocchi, improv, vivic, child, despair, ra', tragic, chimney]]
In: [cat, today, yoda, artistic, cute, ewok, kilo, to, otter] attic
Out: [attic, cat, today, yoda, artistic, cute, ewok, kilo, otter]
Respuestas:
Pyth,
2523 bytesBanco de pruebas
Una solución de fuerza bruta. Demasiado lento para algunos de los casos de prueba más grandes.
Entrada en el formulario:
Salida en la forma:
Explicación:
fuente
JavaScript (ES6), 164 bytes
Explicación
Una función recursiva que comprueba cuánto tiempo durará la lista de salida para todas las opciones posibles.
Devuelve una matriz de matrices de palabras.
Prueba
El parámetro predeterminado no se utiliza en la prueba para que sea más compatible con todos los navegadores.
Mostrar fragmento de código
fuente
o[r.length]?
lugar deo.length>r.length?
.o[r.length]
propina! Sinpop
embargo , no sé cómo podría usar .Python, 104
Creo que debería funcionar ahora ...
Pruébalo en línea .
fuente
Perl 5, 275 bytes
Probablemente no haya jugado al golf tanto como sea posible, pero, oye, de todos modos no es ganador, ¿verdad?
Úselo así:
¡Advertencia! ¡El uso de este script en una lista larga requiere mucha memoria! Me funcionó muy bien en siete (seis más el extra) pero no en trece (doce más uno).
Elimina la entrada final, genera una matriz de arrayrefs, donde los arrayrefs son todas las permutaciones, y agrega la palabra inicial al comienzo. Luego, empuja cada una de esas permutaciones a otra matriz, que es el valor de un hash con clave, la cantidad de la matriz que tiene la propiedad de encadenamiento deseada. Luego encuentra la clave máxima e imprime todas las matrices.
fuente
C, 373 bytes
Creo que probablemente haya mucho más golf que pueda hacer aquí, así que probablemente lo actualizaré.
De-golf
Enlace de Ideone : si no lo hice bien, hágamelo saber: D
fuente