Wie wir alle wissen, sind Limericks kurze, fünfzeilige, gelegentlich unzüchtige Gedichte mit einem AABBA-Reimschema und einer anapestischen Anzeige (was auch immer das ist):
Einen Limerick absurd schreiben
Zeile eins und Zeile fünf Reim in Wort
Und so wie du es dir vorgestellt hast
Reimen sie sich mit der zweiten
Die vierte Zeile muss sich mit der dritten reimen
Sie müssen das kürzeste Programm schreiben , das bei Eingabe eines Eingabetexts ausgibt, ob es den Eindruck hat, dass die Eingabe ein gültiger Limerick ist. Die Eingabe kann wahlweise über die Befehlszeile oder über die Standardeingabe erfolgen, und die Ausgabe kann wahlweise über ein einfaches "J" / "N" oder einen Vertrauensfaktor erfolgen.
Hier ist ein weiteres Beispiel für einen korrekten Limerick:
Es gab eine junge Dame, deren Augen
in Bezug auf Farbe und Größe einzigartig waren.
Als sie sie weit öffnete,
wandten sich alle ab
und gingen überrascht davon
Aber das Gedicht unten ist eindeutig kein Limerick, da es nicht reimt:
Es gab einen alten Mann von St. Bees
, der von einer Wespe in den Arm gestochen wurde.
Auf die Frage: "Tut es weh?"
Er antwortete: "Nein,
ich bin so froh, dass es keine Hornisse war."
Dies ist auch nicht der Fall, da der Zähler völlig falsch ist:
Ich hörte von einem Mann aus Berlin
, der das Zimmer, in dem er war, hasste.
Als ich fragte, warum
er mit einem Seufzer sagen würde:
"Nun, siehst du, letzte Nacht waren ein paar Trottel in der Nähe, die die Bären feierten, die die Verdammten gewannen WM, und sie waren sehr laut, so dass ich wegen des Lärms nicht schlafen konnte. "
Hinweise
Hier sind einige Hinweise, anhand derer Sie entscheiden können, ob Ihre Eingabe ein Limerick ist oder nicht:
- Limericks sind immer fünf Zeilen lang.
- Die Zeilen 1, 2 und 5 sollten sich reimen.
- Die Zeilen 3 und 4 sollten sich reimen.
- Die Zeilen 1, 2 und 5 haben ungefähr 3x3 = 9 Silben, während die dritte und vierte Zeile 2x3 = 6 Silben haben
Beachten Sie, dass mit Ausnahme der ersten keine davon schnell und zuverlässig ist: Eine 100% ige Korrektheitsbewertung ist nicht möglich.
Regeln
Ihr Beitrag sollte zumindest die Beispiele 1 bis 3 deterministisch kategorisieren.
Sie sind erlaubt jede Programmiersprache verwenden würden Sie, außer natürlich Programmiersprachen speziell für diesen Wettbewerb (siehe entworfen , um wie hier ).
Sie sind nicht jede Bibliothek außer Ihrer Programmiersprache Standardangebot zu nutzen.
Sie sind davon ausgehen darf , dass diese Datei , die CMU Sphinx pronounciation Wörterbuch, in einer Datei ist ‚c‘ im aktuellen Verzeichnis genannt.
Sie dürfen die Testeingaben nicht hart codieren: Ihr Programm sollte ein allgemeines Limerick-Kategorisierungsprogramm sein.
Sie sind erlaubt , anzunehmen , dass die Eingabe ASCII ist, ohne spezielle Formatierung (wie in den Beispielen), aber Ihr Programm soll nicht von Interpunktion verwechselt werden.
Boni
Folgende Boni stehen zur Verfügung:
- Ihr Programm gibt das Ergebnis als Limerick aus? Subtrahieren 150 Zeichen Länge Bonus!
- Ihr Programm erkennt auch Sonette korrekt? Subtrahiere 150 zusätzliche Zeichen !
- Ihr Programm gibt das Ergebnis als Sonett aus, wenn es auf einem Sonett verwendet wird. Subtrahiere 100 zusätzliche zusätzliche Zeichen !
Schließlich...
Denken Sie daran, zu erwähnen, welche Boni Sie Ihrer Meinung nach verdient haben, und subtrahieren Sie den Bonus von der Anzahl Ihrer Charaktere, um Ihre Punktzahl zu erreichen. Dies ist ein Code-Golf- Wettbewerb: Der kürzeste Eintrag (dh der Eintrag mit der niedrigsten Punktzahl) gewinnt.
Wenn Sie mehr (positive) Testdaten benötigen, lesen Sie die OEDILF oder das Book of Nonsense . Negative Testdaten sollten einfach zu konstruieren sein.
Viel Glück!
quelle
code-challenge
an den Boni liegen. Bitte lesen Sie die Tag-BeschreibungenAntworten:
Python: 400 - 150 - 150 = 100
Das kürzeste Skript, das ich mir einfallen lassen konnte, ist das ...
... aber versuche es nicht einmal. Es analysiert das bereitgestellte Wörterbuch für jedes Wort, das es trifft, und ist daher sehr langsam. Außerdem wird ein Fehler generiert, wenn ein Wort nicht im Wörterbuch enthalten ist.
Der Code erfüllt dennoch die Anforderungen: Erkennen, ob der über stdin übergebene Text ein Limerick, ein Sonett oder keiner von beiden ist.
Mit nur 20 weiteren Zeichen ist hier die optimierte Version:
Eigenschaften
Verwendung
3 verschiedene Ausgänge sind möglich:
Erweiterter Code mit Erläuterungen
quelle
sys.stdin.read()
oderopen(sys.argv[1]).read()
irgendwo) und nachzählen.ECMAScript 6 (138 Punkte; versuchen Sie es in Firefox):
288
-150
Punktebonus für das Einbeziehen von Limerick (eingeklemmt von @MathieuRodic).Anmerkungen:
Erwartet, dass die Variable
c
den Inhalt der Wörterbuchdatei enthält, da Sie keine Dateien in einfachem ECMAScript lesen können.ECMAScript hat keine Standardeingabe, wird jedoch
prompt
allgemein als "Standardeingabe" betrachtet.prompt
Da jedoch Zeilenumbrüche in den meisten (wenn nicht allen) Browsern in Leerzeichen umgewandelt werden, akzeptiere ich Eingaben von der Variableni
.Ungolfed-Code:
quelle