Das Ziel dieser Herausforderung ist es, ein Programm zu schreiben, das in der Lage ist, ein Wort in möglichst wenigen Versuchen zu erraten. Es basiert auf dem Konzept der Lingo-TV-Show ( http://en.wikipedia.org/wiki/Lingo_(US_game_show) ).
Regeln
Bei einer Wortlänge, die als erstes Argument in der Befehlszeile übergeben wurde, stehen dem Player-Programm fünf Versuche zur Verfügung, das Wort zu erraten, indem auf die Standardausgabe eine Schätzung gefolgt von einem einzelnen \n
Zeichen geschrieben wird.
Nachdem eine Vermutung durchgeführt wurde, erhält das Programm eine Zeichenfolge in der Standardeingabe, gefolgt von einem einzelnen \n
Zeichen.
Die Zeichenfolge hat die gleiche Länge wie das zu erratende Wort und besteht aus einer Folge der folgenden Zeichen:
X
: was bedeutet, dass der angegebene Buchstabe nicht in dem zu erratenden Wort enthalten ist?
: was bedeutet, dass der angegebene Buchstabe im zu erratenden Wort vorhanden ist, aber an einer anderen StelleO
: was bedeutet, dass der Brief an dieser Stelle richtig erraten wurde
Wenn das Wort zu erraten , ist zum Beispiel dents
, und das Programm sendet das Wort dozes
, wird es erhalten , OXX?O
weil d
und s
richtig ist, e
ist fehl am Platz, und o
und z
ist nicht vorhanden.
Achten Sie darauf, dass ein Buchstabe, der mehr als das zu erratende Wort vorkommt, nicht mehr als ?
und O
mehr als die Anzahl der Vorkommen des Buchstabens im zu erratenden Wort markiert wird . Wenn das zu erratende Wort beispielsweise lautet cozies
und das Programm sendet tosses
, wird es empfangen, XOXXOO
da nur eines gefunden werden kann s
.
Wörter werden aus einer englischen Wortliste ausgewählt. Wenn das vom Programm gesendete Wort kein gültiges Wort der richtigen Länge ist, wird der Versuch als automatischer Fehler gewertet und es werden nur X
die zurückgegeben.
Das Player-Programm sollte davon ausgehen, dass eine Datei mit dem Namen wordlist.txt
und einem Wort pro Zeile im aktuellen Arbeitsverzeichnis vorhanden ist und bei Bedarf gelesen werden kann.
Vermutungen sollten nur aus alphabetischen Kleinbuchstaben bestehen ( [a-z]
).
Für das Programm sind keine anderen Netzwerk- oder Dateivorgänge zulässig.
Das Spiel endet, wenn eine Zeichenfolge, die nur aus O
besteht, zurückgegeben wird oder nachdem das Programm 5 Versuche unternommen hat und das Wort nicht erraten konnte.
Wertung
Die Punktzahl eines Spiels ergibt sich aus der angegebenen Formel:
score = 100 * (6 - number_of_attempts)
Wenn das Wort also beim ersten Versuch richtig geraten wurde, werden 500 Punkte vergeben. Der letzte Versuch ist 100 Punkte wert.
Wenn Sie das Wort nicht erraten, erhalten Sie null Punkte.
Die Grube
Spielerprogramme werden bewertet, indem versucht wird, 100 zufällige Wörter für jede Wortlänge zwischen einschließlich 4 und 13 Zeichen zu erraten .
Die zufällige Wortauswahl erfolgt im Voraus, sodass alle Einträge die gleichen Wörter erraten müssen.
Das Gewinnerprogramm und die akzeptierte Antwort sind diejenigen, die die höchste Punktzahl erzielen.
Programme werden in einer virtuellen Ubuntu-Maschine ausgeführt, wobei der Code unter https://github.com/noirotm/lingo verwendet wird . Implementierungen in einer beliebigen Sprache werden akzeptiert, sofern angemessene Anweisungen zum Kompilieren und / oder Ausführen bereitgestellt werden.
Ich stelle ein paar Testimplementierungen in Ruby im Git-Repository zur Verfügung. Lassen Sie sich gerne von ihnen inspirieren.
Diese Frage wird regelmäßig mit Ranglisten für veröffentlichte Antworten aktualisiert, damit Herausforderer ihre Einträge verbessern können.
Die offizielle Abschlussbewertung findet am 1. Juli statt .
Aktualisieren
Einträge können nun das Vorhandensein von wordlistN.txt
Dateien annehmen , um das Lesen der Wortliste für die aktuelle Wortlänge für N zwischen einschließlich 4 und 13 zu beschleunigen.
Beispielsweise gibt es eine wordlist4.txt
Datei, die alle vier Buchstabenwörter und wordlist10.txt
alle zehn Buchstabenwörter usw. enthält.
Ergebnisse der ersten Runde
Zum Datum des 01.07.2014 wurden drei Einsendungen mit folgenden Ergebnissen eingereicht:
4 5 6 7 8 9 10 11 12 13 Total
./chinese-perl-goth.pl 8100 12400 15700 19100 22100 25800 27900 30600 31300 33600 226600
java Lingo 10600 14600 19500 22200 25500 28100 29000 31600 32700 33500 247300
./edc65 10900 15800 22300 24300 27200 29600 31300 33900 33400 33900 262600
** Rankings **
1: ./edc65 (262600)
2: java Lingo (247300)
3: ./chinese-perl-goth.pl (226600)
Alle Einreichungen verliefen konsistent, mit einem klaren Sieger als C ++ - Einreichungen von @ edc65.
Alle Teilnehmer sind ziemlich genial. Ich konnte @ chinese-perl-goth noch nicht einmal schlagen.
Bei weiteren Einsendungen erfolgt eine erneute Bewertung. Aktuelle Einträge können auch verbessert werden, wenn Sie das Gefühl haben, es besser zu machen.