Das Ghost-Spiel wird zwischen zwei Spielern gespielt, die abwechselnd in jeder Runde einen Buchstaben sagen. An jedem Punkt müssen die Buchstaben bisher ein gültiges englisches Wort beginnen. Der Verlierer ist der Spieler, der zuerst ein vollständiges Wort vervollständigt. Wenn zum Beispiel die Buchstaben bisher EAGL sind, ist der einzig gültige nächste Buchstabe "E" und der nächste Spieler verliert. (Auch wenn es längere Wörter wie "Adler" gibt.)
Die Herausforderung
Sie müssen ein Programm oder eine Funktion schreiben, um anhand der bisherigen Buchstaben zu bestimmen, wer unter der Annahme von zwei perfekten Spielern gewinnt. Die Eingabe ist eine Zeichenfolge, die den aktuellen Status des Spiels darstellt, und eine Liste von Zeichenfolgen, die das Wörterbuch gültiger Wörter darstellen. Die Ausgabe sollte unterscheiden, ob der nächste Spieler gewinnt oder verliert.
Einzelheiten
- Der Code muss den Fall behandeln, in dem der aktuelle Status leer ist. Sie können jedoch davon ausgehen, dass kein Wort im Wörterbuch leer ist.
- Sie können davon ausgehen, dass jede Eingabezeichenfolge nur aus ASCII-Kleinbuchstaben besteht, dh az.
- Sie können den aktuellen Status annehmen und alle Wörter im Wörterbuch haben jeweils höchstens 80 Zeichen.
- Das Wörterbuch ist garantiert nicht leer (um den Fall zu vermeiden, dass es keinen gültigen ersten Zug gibt).
- Sie können davon ausgehen, dass der "aktuelle Status" gültig ist: Es wird notwendigerweise ein Wort geben, das mit dem aktuellen Status beginnt. Außerdem ist der aktuelle Status weder ein vollständiges Wort noch ein Präfix des aktuellen Status ein vollständiges Wort.
- Das Wörterbuch wird nach den Regeln vorgefiltert, nach denen "englische Wörter" für das Spiel gültig sind. Bei einer Variante, bei der Wörter mit drei oder weniger Buchstaben das Spiel noch nicht beenden, wird das Wörterbuch vorgefiltert vorgefiltert werden, um nur die Wörter von vier oder mehr Buchstaben einzuschließen.
- Sie können davon ausgehen, dass das Wörterbuch vorsortiert wird.
Beispiele
Angenommen, das Wörterbuch lautet:
abbot
eager
eagle
eaglet
earful
earring
Für die folgenden aktuellen Zustände sollte die Ausgabe dann wie folgt sein:
Current state Result
============= ======
loss
a win
eag win
eagl loss
ear win
earf win
earr loss
Ebenso ist für die Wortliste unter https://raw.githubusercontent.com/dschepler/ghost-word-list/master/wordlist.txt (erstellt auf einem Debian-System unter Verwendung pcregrep '^[a-z]{4,80}$' /usr/share/dict/american-english
) hier eine mögliche Sitzung:
Current state Result
============= ======
win
h loss
ho win
hoa loss
hoar win
hoars loss
(Und dann schließt der nächste Zug "heiser" ab.)
Wertung
Dies ist Code-Golf : Das kürzeste Programm in Bytes für jede Programmiersprache gewinnt.