Als ich jünger war, verwende ich ein Wortspiel spielen namens Word - Kette . Es war sehr einfach. Der erste Spieler wählt ein Wort; der nächste Spieler sagt ein anderes Wort, das mit demselben Buchstaben beginnt, mit dem das vorherige Wort geendet hat. Das geht ewig so weiter, bis jemand aufgibt! Der Trick ist, dass Sie nicht dasselbe Wort zweimal verwenden können (es sei denn, jeder hat vergessen, dass dieses Wort überhaupt verwendet wurde!). Normalerweise spielen wir mit einem bestimmten Thema, um es schwieriger zu machen. Aber jetzt möchte ich, dass Sie ein Programm erstellen, um dies für mich zu tun.
Herausforderung
Schreiben Sie ein vollständiges Programm oder eine vollständige Funktion, um mit einer bestimmten Menge von Wörtern möglichst lange Wortketten zu finden und das Wort zu beginnen.
Das ist Code-Golf , also gewinnt der kürzeste Code!
Eingang
Es gibt zwei Eingänge: eine Liste und ein Startwort. Das Startwort ist nicht in der Liste enthalten. Alle Eingaben sind ASCII-Kleinbuchstaben, und die Liste enthält keine doppelten Wörter.
Ausgabe
Alle Wortfolgen aus der Liste, so dass:
Das Startwort ist das erste Wort in der Sequenz.
Jedes nachfolgende Wort beginnt mit dem gleichen Buchstaben wie der letzte Buchstabe des vorherigen Wortes.
Die Länge der Sequenz ist so lang wie möglich .
Wenn es mehrere längste Sequenzen gibt, geben Sie alle aus.
Die Sequenz muss nicht unbedingt alle Listenwörter enthalten. Manchmal ist das nicht möglich (siehe Testfälle). Auch hier kann kein Wort zweimal verwendet werden!
Testfälle
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]
Antworten:
Pyth,
2523 BytesTestsuite
Eine Brute-Force-Lösung. Für einige der größeren Testfälle viel zu langsam.
Eingabe in das Formular:
Ausgabe in der Form:
Erläuterung:
quelle
JavaScript (ES6), 164 Byte
Erläuterung
Eine rekursive Funktion, die überprüft, wie lange die Ausgabeliste für alle möglichen Auswahlen gültig ist.
Gibt ein Array von Arrays von Wörtern zurück.
Prüfung
Der Standardparameter wird im Test nicht verwendet, um die Kompatibilität mit anderen Browsern zu verbessern.
Code-Snippet anzeigen
quelle
o[r.length]?
anstelle von verwendeno.length>r.length?
.o[r.length]
Tipp wirklich ! Ich weiß allerdings nicht, wie ich es gebrauchen könntepop
.Python, 104
Ich denke, es sollte jetzt funktionieren ...
Probieren Sie es online aus .
quelle
Perl 5, 275 Bytes
Wahrscheinlich nicht so viel Golf gespielt wie es sein kann, aber es ist sowieso nicht siegreich, oder?
Verwenden Sie es so:
Warnung! Die Verwendung dieses Skripts auf einer langen Liste erfordert viel Speicher! Bei sieben (sechs plus eins) hat es super geklappt, aber nicht bei dreizehn (zwölf plus eins).
Es entfernt die letzte Eingabe, generiert ein Array von Arrayrefs, wobei die Arrayrefs alle Permutationen sind, und fügt das Anfangswort am Anfang wieder ein. Dann schiebt es jede solche Permutation auf ein anderes Arrayref, das der Wert eines Hashs mit Schlüssel ist, der die Menge des Arrays angibt, das die gewünschte Verkettungseigenschaft hat. Es findet dann den maximalen solchen Schlüssel und druckt alle Arrays aus.
quelle
C 373 Bytes
Ich glaube, dass ich hier wahrscheinlich viel mehr Golf spielen könnte, also werde ich es wahrscheinlich aktualisieren.
De-Golf
Ideone Link - Wenn ich das nicht richtig gemacht habe, lass es mich wissen: D
quelle