Quand j'étais plus jeune, je jouais à un jeu de mots appelé Chaîne de mots . C'était très simple. Le premier joueur choisit un mot; le joueur suivant dit un autre mot qui commence par la même lettre que le mot précédent se terminait par. Cela continue indéfiniment jusqu'à ce que quelqu'un abandonne! L'astuce est que vous ne pouvez pas utiliser le même mot deux fois (sauf si tout le monde a oublié que ce mot a même été utilisé!). Habituellement, nous jouons avec un certain sujet pour le rendre plus difficile. Mais maintenant, je veux que vous fassiez un programme pour le faire pour moi.
Défi
Écrivez un programme ou une fonction complète pour trouver toutes les chaînes de mots les plus longues possibles en utilisant un ensemble de mots donné et commencez le mot.
C'est le code-golf , donc le code le plus court gagne!
Contribution
Il y a deux entrées: une liste et un mot de départ. Le mot de départ ne sera pas dans la liste. Les entrées sont toutes en ASCII minuscule et la liste ne contiendra pas de mots en double.
Production
Toutes les séquences de mots de la liste telles que:
Le mot de départ est le premier mot de la séquence.
Chaque mot suivant commence par la même lettre que la dernière lettre du mot précédent.
La longueur de la séquence est la plus longue possible .
S'il existe plusieurs séquences plus longues, sortez-les toutes.
La séquence ne doit pas nécessairement contenir tous les mots de la liste. Parfois, ce n'est pas possible (voir les tests). Encore une fois, aucun mot ne peut être utilisé deux fois!
Cas de test
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]
Réponses:
Pyth,
2523 octetsSuite de tests
Une solution de force brute. Beaucoup trop lent pour certains des cas de test les plus importants.
Saisie sous forme:
Sortie sous forme:
Explication:
la source
JavaScript (ES6), 164 octets
Explication
Une fonction récursive qui vérifie la durée de la liste de sortie pour tous les choix possibles.
Renvoie un tableau de tableaux de mots.
Tester
Paramètre par défaut non utilisé dans le test pour le rendre plus compatible avec tous les navigateurs.
Afficher l'extrait de code
la source
o[r.length]?
au lieu deo.length>r.length?
.o[r.length]
conseil! Je ne sais pas comment je pourrais l'utiliserpop
cependant.Python, 104
Je pense que ça devrait marcher maintenant ...
Essayez-le en ligne .
la source
Perl 5, 275 octets
Probablement pas autant que possible jouer au golf, mais bon, c'est de toute façon non gagnant, non?
Utilisez-le ainsi:
Avertissement! L'utilisation de ce script sur une longue liste nécessite beaucoup de mémoire! Cela a très bien fonctionné pour moi sur sept (six plus le supplément) mais pas sur treize (douze plus un).
Il supprime l'entrée finale, génère un tableau de références tableau, où les références tableau sont toutes les permutations, et ajoute le mot initial au début. Ensuite, il pousse chaque permutation sur une autre référence de tableau qui est la valeur d'un hachage avec la clé la quantité de tableau qui a la propriété de chaînage souhaitée. Il trouve ensuite le maximum de telles clés et imprime tous les tableaux.
la source
C, 373 octets
Je pense qu'il y a probablement beaucoup plus de golf que je pourrais faire ici, donc je vais probablement le mettre à jour.
De-golf
Lien Ideone - Si je ne l'ai pas fait correctement, faites le moi savoir: D
la source