Contexte
Il y a trois ans, ce type Tom Murphy s'est mis en tête d'étendre l'idée d'un portemanteau à tous les mots dans une langue et a appelé cela un portmantout ( portmanteau plus tout [français pour tous ]). Définissant l'anglais comme une liste de 108 709 mots, il a réussi à trouver une séquence de 611 820 lettres avec les deux propriétés suivantes:
- Chaque mot anglais est contenu dans la chaîne.
- Un quartier contenant deux lettres adjacentes dans la chaîne est un mot anglais.
Voici un lien vers une page sur laquelle ce portmantout peut être trouvé (avec une explication vidéo).
Un portemantout
La première des deux propriétés d'un portmantout est facile à comprendre. La seconde peut nécessiter quelques explications.
Fondamentalement, les mots doivent se chevaucher. "golfcode" n'apparaîtra jamais dans un portmantout de l'anglais, car il n'y a aucun mot qui contient le "fc". Cependant, vous pouvez trouver "codegolf" dans un portmantout, car "ego" comble l'écart (et toutes les autres paires de lettres sont soit en "code" soit en "golf").
Ta tâche:
Écrivez un programme ou une fonction qui prend une liste de chaînes et renvoie tout portmantout de la liste.
Ce code Python 3 vérifiera un portmantout.
Cas de test
Toutes les listes ne sont pas ordonnées; C'est,
{"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
Et pourquoi pas? L'énorme sur le site de Murphy, si votre code s'exécute dans un délai raisonnable.
Règles
- Votre code doit s'arrêter.
- Vous n'avez pas besoin de renvoyer le même portmantout à chaque exécution.
- Vous pouvez prendre toutes les chaînes se composent de lettres minuscules seulement
a
parz
. - Si aucun portmantout n'est possible, votre programme peut faire n'importe quoi. Ex:
{"most", "short", "lists"}
- Les règles standard pour les E / S et les failles s'appliquent.
Il s'agit de code-golf , donc la solution la plus courte (en octets) dans chaque langue gagne! Bon golf!
la source
{"sic", "bar", "rabbits", "cradle"} -> "barabbitsicradle"
{"mauve", "elated", "cast", "electric", "tame"} -> "mauvelectricastamelated"
(plus de cas de test)Réponses:
Python 2 ,
204202 octetsEssayez-le en ligne!
Enregistré
la source
["ab", "ba", "ca"]
. Ma solution a le même bug.Pyth, 39 octets
Essayez-le ici
Explication
la source
Stax ,
3936 octetsExécuter et déboguer
Exécute tous les cas de test de manière déterministe en environ une seconde.
Il s'agit d'un algorithme récursif.
Voici le programme décompressé, non golfé et commenté.
Exécutez celui-ci
Modifier: cela échoue pour une classe d'entrées qui a une boucle, comme la
["ab", "ba", "ca"]
plupart des autres réponses publiées.la source
JavaScript (ES6),
138130 octetsRenvoie une erreur pour les listes qui ne peuvent pas être complètement portées.
Non golfé:
Afficher l'extrait de code
Le code est atrocement lent sur l'exemple de l'alphabet complet (non inclus pour cette raison dans l'extrait ci-dessus).
Cela est résolu en changeant le
map
s ensome
s, pour la perte de 2 octets:Afficher l'extrait de code
la source