Word Changer ist ein Spiel, bei dem Sie versuchen, ein Wort durch Bearbeiten einzelner Zeichen in ein anderes zu verwandeln, wobei jeder Schritt ein eigenes Wort ist. Für diese Herausforderung können Änderungen Ersetzungen, Einfügungen oder Löschungen sein. Zum Beispiel kann WINNER → LOSER mit dieser Route durchgeführt werden (es kann auch andere geben):
WINNER
DINNER
DINER
DINE
LINE
LONE
LOSE
LOSER
Anders ausgedrückt, Sie müssen in der Lage sein, ein Wort von dem anderen zu erreichen, indem Sie nur durch andere Wörter mit einem Levenshtein-Abstand von jeweils 1 gehen.
Codierung
Sie erhalten eine Wortliste und zwei Wörter und müssen eine gültige Route von einem Wort zum anderen ausgeben, wenn eine Route existiert, oder einen bestimmten konstanten Wert oder ein konsistentes Verhalten, wenn keine Route existiert.
- Sie können davon ausgehen, dass sich beide Eingabewörter in der Wortliste befinden
- Die Wortliste kann über jedes beliebige flache Format aufgenommen werden.
- Listen, Mengen, Versuche, durch Leerzeichen getrennte Zeichenfolgen und durch Zeilen getrennte Dateien sind alle gültig (z. B.), ein vorberechnetes Diagramm der Levenshtein-Adjazenz jedoch nicht.
- Die Ausgaberoute sollte beide Eingabewörter enthalten, aber was beginnt und endet, spielt keine Rolle.
- Wenn keine Route gefunden wird, können Sie eine bestimmte Konstante, einen falschen Wert, eine leere Liste, eine Ausnahme ausgeben, mit einem Code ungleich Null beenden oder jedes andere Verhalten, das in endlicher Zeit auftritt.
- Die Route muss nicht optimal sein und es gibt keine Anforderung, welche Route genommen werden soll
- Die Komplexität der Berechnungen spielt keine Rolle, es muss jedoch nachweislich gewährleistet sein, dass Ihr Programm in einer begrenzten Zeitspanne endet. (Auch wenn es über den Hitzetod des Universums hinaus laufen würde)
- Sie können davon ausgehen, dass alle Wörter im selben Fall vollständig aus Buchstaben bestehen
Beispiel Testfälle
- CAT → HUND; [CAT, HUND, COG, COT, FROSCH, GROG, BOG]
- CAT, COT, COG, DOG
- BAD → DUSCHE; [BAD, DUSCHE, HAT, HAT, BAT, SAT, SÄGE, SÄGE, SHOW, WIE]
- Keine Route gefunden
- BREAK → FIX; [BREAK, FIX, BEAK, BROT, READ, BEAD, ROT, BETT, SCHLECHT, BIETEN, FAD, FAX]
- BREAK, BROT, BEAD, BAD, FAD, FAX, FIX
- BAUEN → ZERSTÖREN; [BAUEN, ZERSTÖREN, BAUEN, SCHULDEN, GILDEN, GILDEN, KÜHLEN, RECHNEN, DILLEN, FÜLLEN, ZERSTÖREN, STRUKTURIEREN, BAUEN]
- Keine Route gefunden
- CARD → BOARD; [KARTE, BRETT, BARD]
- KARTE, BARD, BOARD
- DEMON → ENGEL; [DEMON, ANGEL]
- Keine Route gefunden
- LAST → PAST; [LAST, PAST, BLAST, CAST, SCHWARZ, GEIST, POST, BOAST]
- LETZT, VERGANGEN
- INSERT → DELETE; Diese Wortliste
- INSERT, INVERT, INVENT, INBENT, UNBENT, UNBEND, UNBIND, UNKIND, UNKING, INKING, IRKING, DIRKING, DUNKEL, DARLING, ARLING, AILING, SIRING, SERING, SERIN, NERIN, NERIT, CERIT, CERATE LÖSCHEN
quelle
Antworten:
05AB1E ,
232120 BytesDruckt eine Liste der gültigen Routen.
2 Bytes dank Kevin Cruijssen gespeichert .
Probieren Sie es online!
quelle
Dævyœ«}
zu怜€`
. (Nicht sicher, warum beide Karten separat mit€
funktionieren, aberæεœ`}
nicht übrigens, aber es ist die gleiche[]
ist1
statt0
(nicht allzu überraschend, obwohl) oder dass eine gleiche Prüfung mit einer leeren Liste scheinbar Ergebnisse in einer leeren Liste statt0
(diese ich als Fehler sehen ..) .. Ansonsten Sie kombiniert haben könnten der Filter und find_first, um ein weiteres Byte zu speichern:怜€`.Δü.LPy¬²Qsθ³QP
€
. Ich denke, die Gleichheitsprüfung führt aufgrund der Vektorisierung zu einer leeren Liste. Vielleicht sollte es einen Sonderfall für die leere Liste geben, aber vielleicht wäre das in anderen Fällen unerwartet.JavaScript (V8) ,
177 bis176 ByteÜbernimmt die Eingabe als
(target)(source, list)
. Druckt alle möglichen Routen. Oder druckt nichts, wenn es keine Lösung gibt.Probieren Sie es online!
Kommentiert
quelle
Wolfram Language (Mathematica) , 59 Bytes
Probieren Sie es online!
quelle
Python 2 , 155 Bytes
Probieren Sie es online!
Nimmt zwei Wörter und eine Reihe von Wörtern als Eingabe; Gibt eine (nicht optimale) Route zurück, wenn eine als Liste von Zeichenfolgen vorhanden ist, andernfalls wird False zurückgegeben.
Dieses Fragment:
ist
True
genau dann, wenna==w
odera
hat Levenshtein Abstand1
vonw
.quelle
Wolfram Language (Mathematica) , 124 Byte
Probieren Sie es online!
quelle
Python 2 , 163 Bytes
Wenn eine Route gefunden wurde, wird sie an stderr
ausgegeben und das Programm wird mit dem Beendigungscode 1 beendet. Wenn keine Route vorhanden ist, erfolgt keine Ausgabe und das Programm wird mit dem Beendigungscode 0 beendet.
Probieren Sie es online!
quelle
Python 3 ,
217214212201 Bytes-11 Bytes Danke an einen Hinweis von xnor
Probieren Sie es online!
quelle
Jelly , 38 Bytes
Probieren Sie es online!
Ein vollständiges Programm, das drei Argumente akzeptiert. Das erste ist das Startwort und wird als geliefert
[["START"]]
. Das zweite Argument ist das letzte Wort, geliefert als"END"
. Das dritte Argument ist die Wortliste, die als zitierte, durch Kommas getrennte Wörter geliefert wird.Das Programm gibt eine Liste von Listen zurück, wobei jede Liste einen gültigen Pfad vom Anfang bis zum Ende darstellt. Wenn es keine gültige Route gibt, ist die Antwort eine leere Liste.
In der TIO-Verknüpfung gibt es einen Fußzeilentext, der das Ergebnis gut anzeigt, wobei jedes Wort durch Leerzeichen und jede Liste von Wörtern durch Zeilenumbrüche getrennt ist. Wenn ein Ausdruck der zugrunde liegenden Listendarstellung bevorzugt wird, kann dies wie folgt erfolgen
ÇŒṘ
.Im Gegensatz zu 05ABIE gibt es für Levenshtein-Entfernungen keine integrierte Funktion. Daher vergleicht dieses Programm Outfixes mit einem einzelnen fehlenden Zeichen, ähnlich wie bei der @ ChasBrown-Lösung , jedoch mit einem Jelly-Twist.
Erläuterung
Hilfslink: monadischer Link, der eine Liste von Wörtern aufnimmt und eine Liste möglicher erweiterter Listen zurückgibt, oder eine leere Liste, wenn keine weitere Erweiterung möglich ist
Hauptlink
quelle
Swift 4.2 / Xcode 10.2.1 , 387 Bytes
Probieren Sie es online!
quelle