Antecedentes
Hace tres años, este tipo Tom Murphy se le ocurrió pensar en extender la idea de un acrónimo a todas las palabras en un idioma y llamó a esto un portmantout ( portmanteau plus tout [francés para todos ]). Al definir el inglés como una lista de 108,709 palabras, logró encontrar una secuencia de 611,820 letras con las siguientes dos propiedades:
- Cada palabra en inglés está contenida en la cadena.
- Un vecindario que contiene dos letras adyacentes en la cadena es una palabra en inglés.
Aquí hay un enlace a una página en la que se puede encontrar este portmantout (junto con una explicación en video).
Un portmantout
La primera de las dos propiedades de un portmantout es fácil de entender. El segundo puede requerir alguna explicación.
Básicamente, las palabras deben superponerse. "golfcode" nunca aparecerá en un portmantout de inglés, ya que no hay una palabra que contenga el "fc". Sin embargo, puede encontrar "codegolf" en un portmantout, ya que "ego" cierra la brecha (y todos los demás pares de letras están en "código" o "golf").
Tu tarea:
Escriba un programa o función que tome una lista de cadenas y devuelva cualquier portmantout de la lista.
Este código de Python 3 verificará un portmantout.
Casos de prueba
Todas las listas están desordenadas. es decir,
{"code", "ego", "golf"} -> "codegolf"
{"more", "elm", "maniac"} -> "morelmaniac" or "morelmorelmaniac" or "morelmorelmorelmaniac" or...
Would a morelmaniac be some sort of mycologist?
{"ab", "bc", "cd", "de", "ef", "fg", "gh", "hi", "ij", "jk", "kl", "lm", "mn", "no", "op", "pq", "qr", "rs", "st", "tu", "uv", "vw", "wx", "xy", "yz", "za"} -> "abcdefghijklmnopqrstuvwxyza" or "rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdef" or any 27+ letters in order
¿Y por qué no? El masivo en el sitio de Murphy, si su código se ejecuta dentro de un tiempo razonable.
Reglas
- Tu código debe detenerse.
- No necesita devolver el mismo portmantout con cada ejecución.
- Usted puede asumir todas las cadenas se componen de sólo letras en minúscula
a
a travész
. - Si no es posible portmantout, su programa puede hacer cualquier cosa. Ex:
{"most", "short", "lists"}
- Se aplican las reglas estándar para E / S y lagunas .
Este es el código de golf , por lo que gana la solución más corta (en bytes) en cada idioma. ¡Feliz golf!
fuente
{"sic", "bar", "rabbits", "cradle"} -> "barabbitsicradle"
{"mauve", "elated", "cast", "electric", "tame"} -> "mauvelectricastamelated"
(más casos de prueba)Respuestas:
Python 2 ,
204202 bytesPruébalo en línea!
Salvado
fuente
["ab", "ba", "ca"]
. Mi solución tiene el mismo error.Pyth, 39 bytes
Pruébalo aquí
Explicación
fuente
Stax ,
3936 bytesEjecutar y depurarlo
Ejecuta todos los casos de prueba de manera determinista en aproximadamente un segundo.
Este es un algoritmo recursivo.
Aquí está el programa desempaquetado, sin golf y comentado.
Ejecute este
Editar: esto falla para una clase de entradas que tiene un bucle, como
["ab", "ba", "ca"]
, al igual que la mayoría de las otras respuestas publicadas.fuente
JavaScript (ES6),
138130 bytesDevuelve un error para las listas que no se pueden portar por completo.
Sin golf:
Mostrar fragmento de código
El código es insoportablemente lento en el ejemplo del alfabeto completo (no incluido por esa razón en el fragmento anterior).
Eso se soluciona cambiando los
map
s asome
s, por la pérdida de 2 bytes:Mostrar fragmento de código
fuente