Le changeur de mots est un jeu où vous essayez de transformer un mot en un autre via des modifications à un seul caractère, chaque étape étant son propre mot. Pour ce défi, les modifications peuvent être des remplacements, des insertions ou des suppressions. Par exemple, WINNER → LOSER peut être fait avec cet itinéraire (il peut y en avoir d'autres):
WINNER
DINNER
DINER
DINE
LINE
LONE
LOSE
LOSER
Formulé autrement, vous devez être capable d'atteindre un mot de l'autre en ne passant que par d'autres mots à une distance Levenshtein de 1 à chaque fois.
Codage
Vous recevrez une liste de mots et deux mots et vous devez sortir un itinéraire valide d'un mot à l'autre s'il existe un itinéraire ou une valeur constante distincte ou un comportement cohérent si aucun itinéraire n'existe.
- Vous pouvez supposer que les mots saisis sont tous les deux dans la liste de mots
- La liste de mots peut être prise via n'importe quel format plat pratique.
- Les listes, les ensembles, les essais, les chaînes séparées par des espaces et les fichiers séparés par des lignes sont tous valides (par exemple), mais un graphique précalculé de la contiguïté de Levenshtein ne l'est pas.
- La route de sortie doit inclure les deux mots d'entrée, mais ce qui commence et se termine n'a pas d'importance.
- Si aucune route n'est trouvée, vous pouvez sortir une constante spécifique, une valeur falsifiée, une liste vide, lever une exception, quitter avec un code différent de zéro ou tout autre comportement qui se produit en temps fini.
- L'itinéraire n'a pas besoin d'être optimal et il n'y a aucune exigence de l'itinéraire à suivre
- La complexité informatique n'a pas d'importance, mais votre programme doit être garanti de manière à se terminer dans un laps de temps limité. (même si cela irait au-delà de la mort thermique de l'univers)
- Vous pouvez supposer que tous les mots sont entièrement composés de lettres dans le même cas
Exemples de cas de test
- CHAT → CHIEN; [CHAT, CHIEN, COG, COT, GRENOUILLE, GROG, BOG]
- CHAT, COT, COG, CHIEN
- BAIN → DOUCHE; [BAIN, DOUCHE, CHAPEAU, CHAPEAU, BAT, SAT, SCIE, TRUIE, AFFICHAGE, COMMENT]
- Aucun itinéraire trouvé
- BREAK → FIX; [BREAK, FIX, BEAK, BREAD, READ, BEAD, RED, BED, BAD, BID, FAD, FAX]
- PAUSE, PAIN, PERLE, MAUVAIS, FAD, FAX, FIX
- CONSTRUIRE → DÉTRUIRE; [CONSTRUIRE, DÉTRUIRE, CONSTRUIRE, CONDUIRE, GUILDE, DORÉ, GILL, BILL, DILL, REMPLIR, DÉTRUIRE, STRUCTURE, CONSTRUIRE]
- Aucun itinéraire trouvé
- CARTE → CONSEIL; [CARTE, CONSEIL, BARD]
- CARD, BARD, BOARD
- DEMON → ANGEL; [DEMON, ANGEL]
- Aucun itinéraire trouvé
- DERNIER → PASSÉ; [DERNIER, PASSÉ, BLAST, CAST, NOIR, FANTÔME, POST, BOAST]
- DERNIER, PASSÉ
- INSÉRER → SUPPRIMER; Cette liste de mots
- INSÉRER, INVERSER, INVENTER, INBENT, UNBENT, UNBEND, UNBIND, UNKIND, UNKING, INKING, IRKING, DIRKING, DARKING, DARLING, ARLING, AILING, SIRING, SERING, SERINE, NERINE, NERITE, CERITE, CERATE, DERATE, DELATE, SUPPRIMER
code-golf
string
decision-problem
Beefster
la source
la source
Réponses:
05AB1E ,
232120 octetsImprime une liste des itinéraires valides.
Enregistré 2 octets grâce à Kevin Cruijssen .
Essayez-le en ligne!
la source
Dævyœ«}
pour怜€`
. (Je ne sais pas pourquoi les deux cartes séparément€
fonctionnent correctement, maisæεœ`}
ne fonctionnent pas, mais c'est le même nombre d'octets de toute façon.)[]
soit1
au lieu de0
(pas trop surprenant, cependant) ou qu'un contrôle égal avec une liste vide se traduise apparemment par une liste vide au lieu de0
(celle-ci je vois comme un bug ..) .. Sinon, vous auriez pu combiner le filtre et find_first pour enregistrer un autre octet:怜€`.Δü.LPy¬²Qsθ³QP
€
. Je pense que le contrôle égal entraîne une liste vide en raison de la vectorisation. Peut-être qu'il devrait y avoir un cas spécial pour la liste vide, mais peut-être que ce serait inattendu dans d'autres cas.JavaScript (V8) ,
177176 octetsPrend l'entrée comme
(target)(source, list)
. Imprime tous les itinéraires possibles. Ou n'imprime rien s'il n'y a pas de solution.Essayez-le en ligne!
Commenté
la source
Wolfram Language (Mathematica) , 59 octets
Essayez-le en ligne!
la source
Python 2 , 155 octets
Essayez-le en ligne!
Prend deux mots et un ensemble de mots comme entrée; renvoie une route (non optimale) s'il en existe une sous forme de liste de chaînes, sinon renvoie False.
Ce fragment:
est
True
si et seulement sia==w
oua
a la distance de Levenshtein1
dew
.la source
Wolfram Language (Mathematica) , 124 octets
Essayez-le en ligne!
la source
Python 2 , 163 octets
Si une route est trouvée, elle est sortie vers stderr
et le programme se termine avec le code de sortie 1. S'il n'y a pas de route, il n'y a pas de sortie et le programme se termine avec le code de sortie 0.
Essayez-le en ligne!
la source
Python 3 ,
217214212201 octets-11 octets thanx à un indice de xnor
Essayez-le en ligne!
la source
Gelée , 38 octets
Essayez-le en ligne!
Un programme complet acceptant trois arguments. Le premier est le mot de départ et est fourni en tant que
[["START"]]
. Le deuxième argument est le dernier mot, fourni comme"END"
. Le troisième argument est la liste de mots, fournie sous forme de mots séparés par des virgules.Le programme renvoie une liste de listes, chaque liste représentant un chemin valide du début à la fin. S'il n'y a pas de route valide, la réponse est une liste vide.
Dans le lien TIO, un texte de pied de page affiche le résultat avec chaque mot séparé par des espaces et chaque liste de mots séparés par des retours à la ligne. Si une représentation sous-jacente de liste imprimée est préférée, cela pourrait être fait comme
ÇŒṘ
.Contrairement à 05ABIE, il n'y a pas de distance intégrée pour Levenshtein, donc ce programme compare les outfixes avec un seul caractère manquant, quelque peu similaire à la solution de @ ChasBrown , bien qu'avec une touche Jelly.
Explication
Lien d'aide: lien monadique qui prend une liste de mots et renvoie une liste de listes étendues possibles, ou une liste vide si aucune autre extension n'est possible
Lien principal
la source
Swift 4.2 / Xcode 10.2.1 , 387 octets
Essayez-le en ligne!
la source