Die Grundlagen:
Sie müssen ein Wort-Ratespiel mit neun Ebenen in möglichst wenigen Charakteren (in der Sprache Ihrer Wahl) bereitstellen.
Die Metriken:
- Stellen Sie eine Wortliste bereit (ein Wort pro Zeile, getrennt durch eine neue Zeile) (z. B.
/usr/share/dict/words
oder ähnliches). Es ist in Ordnung, einen Dateinamen oder die Wortliste selbst in Ihre Lösung einzufügen. - Stellen Sie 9 Ebenen mit inkrementeller Wortlänge bereit (Wörter mit 4 Zeichen und
->
12 Zeichen):
Stufe 1: Ein zufälliges Wort aus der Wortliste mit 4 Zeichen Stufe 2: Ein zufälliges Wort aus der Wortliste mit 5 Zeichen ... ... Stufe 8: Ein zufälliges Wort aus der Wortliste mit 11 Zeichen Stufe 9: Ein zufälliges Wort aus der Wortliste mit 12 Zeichen
- Verschleiern Sie in jeder Ebene ein zufällig ausgewähltes Wort aus der Liste (natürlich mit einer bestimmten Wortlänge) und ersetzen Sie eine bestimmte Anzahl von Zeichen durch das Sternchen (
*
). Die Anzahl der zu ersetzenden Zeichen:current_word_length / 3
(abrunden). Randomisieren Sie, welche Zeichen ersetzt werden sollen. - Lassen Sie den Spieler das Wort "erraten" (nur eines
try
pro Level), geben Sie Feedback (correct
oderwrong
) und geben Sie entsprechend Punkte. Wenn es richtig ist, gewinnt der Spielernumber_of_obfuscated_characters * 10 points
. - Drucken Sie die aktuelle Punktzahl am Ende jedes Levels aus.
Das Format (& Beispiel-E / A):
Stellen Sie sicher, dass Sie das folgende Formatierungsschema befolgen:
Level 1 # Level Header ======= # g * ek # verschleiertes Wort Geek # Benutzereingabe korrekte # Vermutung Validierung Punktzahl: 10 # Druckpunktzahl # Level 2 ======= l * nux Linux richtig Punktzahl: 20 Stufe 3 ======= lief ** m zufällig richtig Punktzahl: 40 ... Level 9 ======= sem *** act * ve halbinaktiv falsch Punktzahl: 90
Gewinner:
Kürzeste Lösung (nach Anzahl der Codezeichen). Viel Spaß beim Golfen!
sem***act*ve
==>semelfactive
Antworten:
Perl, 180 Zeichen
Ruby schlägt Perl? Das geht nicht! :-)
Wie die Ruby-Lösung von jsvnm, jedoch im Gegensatz zum Perl-Code von Joel Berger, verwendet dieses Skript den Dateinamen einer Wortliste als Befehlszeilenparameter. Das heißt, Sie sollten es so ausführen:
Hier ist eine Version ohne Golf:
Die Aussage
vec($_, rand $n, 8) = 42 while ($= = $n/3) > y/*//
enthält einige interessante Tricks. Erstens ist 42 der ASCII-Code eines Sterns; Es stellt sich heraus, dass die Verwendungvec
zum Ändern einzelner Zeichen in einer Zeichenfolge kürzer ist als die Verwendung mitsubstr
. Zweitens nimmt die Variable$=
nur ganzzahlige Werte anint
. Wenn ich sie also zum Speichern der Anzahl versteckter Buchstaben verwende, erspare ich mir eine . Schließlichy/*//
ist eine kurze Möglichkeit, die Anzahl der Sternchen in einer Zeichenfolge mithilfe des Transliterationsoperators zu zählen.Bearbeiten: 7 Zeichen wurden
$@
gespeichert, indem die Punktzahl geteilt durch 10 gespeichert und während der Ausgabe eine Null angehängt wurde (was, wenn man es sich vorstellt, kürzer gewesen wäre als die vorherige Version, selbst wenn ich eine normale Variable verwendet hätte). .Bearbeiten 2: Es stellt sich heraus, dass das Einbetten von wörtlichen Zeilenumbrüchen in die Ausgabezeichenfolgen ein Zeichen für das Durcheinander erspart
$,
.quelle
Rubin (188)
Nimmt den Dateinamen zum Lesen von Wörtern als Argument.
quelle
Bash, 350 Zeichen
quelle
Perl: 266
oder mit etwas mehr Leerraum
und ich denke mit ein wenig arbeit könnte es noch besser werden!
quelle
R, 363 Zeichen
quelle
Python 335
Ich weiß, dass ich ein bisschen zu spät zur Party komme, aber Python ist nicht vertreten, also habe ich mir gedacht, was zum Teufel:
Und halb ungolfed:
quelle
K, 198
Nimmt ein Wörterbuch d im aktuellen Arbeitsverzeichnis an.
Ungolfed:
quelle