introduction
Un puzzle de mots populaire consiste à convertir un mot en un autre via une série d'étapes qui remplacent une seule lettre et qui aboutissent toujours à un mot valide. Par exemple, BAG peut être converti en DOG via un chemin de cinq étapes:
SAC -> BAT -> CAT -> COT -> COG -> DOG
Des chemins plus courts existent également dans ce cas; par exemple:
SAC -> BOG -> CHIEN
Si l'on dessinait un graphique dont les sommets étaient étiquetés par des mots, avec un bord entre n'importe quelle paire de mots qui diffèrent par une lettre, alors le chemin le plus court de "BAG" à "DOG" serait composé de deux bords.
Défi
Vous devez écrire un programme qui reçoit en entrée un "dictionnaire" de mots qui ont tous la même longueur, représentant tous les mots autorisés qui peuvent apparaître comme des étapes le long d'un chemin. Il doit produire au moins un "plus long chemin le plus court", c'est-à-dire un chemin entre deux des mots qui est:
pas plus que tout autre chemin entre ces deux mots;
au moins aussi long que le chemin le plus court possible entre toute autre paire de mots de la liste.
Dans le cadre du graphique décrit ci-dessus, la longueur d'un tel chemin est le diamètre du graphique.
Dans le cas dégénéré où aucun des mots d'entrée ne peut être transformé en aucun des autres, sortez au moins un chemin de longueur zéro, c'est-à-dire un seul mot.
Exemples
L'entrée ["bag", "bat", "cat", "cot", "dot", "dog"] devrait donner un chemin traversant les six mots dans cet ordre (ou ordre inverse), car le chemin le plus court de " sac "à" chien "dans ce dictionnaire est la plus longue réalisable, cinq étapes.
L'entrée ["sac", "chauve-souris", "bot", "chat", "lit", "point", "chien"] doit donner le chemin "sac, chauve-souris, bot, point, chien" et / ou son renversement.
L'entrée ["code", "golf", "mâle", "buzz", "taupe", "rôle", "moule", "froid", "or", "mode"] devrait donner un chemin entre "code" et "golf".
L'entrée ["un", "deux", "six", "dix"] correspond à un graphique sans arêtes, donc sortez un ou plusieurs chemins d'un mot (longueur nulle).
Si l'entrée contient deux mots de longueur inégale, la sortie n'est pas définie.
Règles
- Les règles de golf à code standard s'appliquent
- Il y aura plusieurs chemins "plus courts". Vous devez en générer au moins un, mais vous êtes libre d'en générer autant que vous le souhaitez.
- Vous êtes libre de décider comment le dictionnaire d'entrée est transmis à votre programme.
- Le code le plus court en octets gagne.
[]ou [[]])?