Äh, ist es ein Haiku?

19

Sie möchten ein Haiku erstellen, sind sich aber nicht sicher, ob es den Silbenregeln für ein Haiku entspricht.

Ich konnte nicht die Mühe machen, einen richtigen Klappentext zu schreiben, wie ich es normalerweise tue, also musst du damit auskommen. Lassen Sie uns gleich weitermachen.

Ein Haiku in freier Wildbahn finden

Für die Zwecke dieser Herausforderung werden wir prüfen, ob das angegebene Gedicht diese Kriterien erfüllt:

  • Es gibt drei Zeilen.
  • Die erste Zeile besteht aus 5 Silben.
  • Die zweite Zeile besteht aus 7 Silben.
  • Die dritte Zeile besteht aus 5 Silben.

Jede Zeile besteht aus einem oder mehreren Wörtern, die durch Leerzeichengruppen getrennt sind. Diese Wörter sind nicht unbedingt gültige englische Wörter.

Jedes Wort wird in Silben aufgeteilt, und dann werden diese Silben gezählt, um die Gesamtsilbenzahl der Zeile zu erhalten.

Eine Silbe besteht entweder aus 2 oder 3 Teilen: dem Anfang, dem Ende und möglicherweise der Mitte. Jeder Teil ist , entweder eine Gruppe von consonsants (auch als Konsonantengruppe bekannt, wie beispielsweise s, skoder spl) oder eine Gruppe von Vokalen (wie i, eaoder oui).

Wenn der Anfang eine Gruppe von Konsonanten ist, ist die Mitte eine Gruppe von Vokalen und das Ende eine Gruppe von Konsonanten. Wenn der Anfang eine Gruppe von Vokalen ist, wird das Ende eine Gruppe von Konsonanten sein und es wird keine Mitte geben.

Zum Beispiel besteht das Wort exampleaus drei Silben ex, amund ple. plehat kein Ende, da es am Ende des Wortes gekürzt wurde.

Als weiteres Beispiel hat das Wort syllableauch drei Silben syll, ablund e, die ebenfalls kein Ende haben.

Für ein letztes Beispiel hat das Wort wordeine Silbe word, die mit einer Gruppe von Konsonanten endet.

Die Herausforderung

Bestimmen Sie anhand einer Zeichenfolge, einer Liste von Zeichenfolgen, einer Liste von Listen oder eines anderen sinnvollen Formats, das ein Gedicht mit mindestens einer Zeile darstellt, ob es die oben beschriebenen Kriterien eines Haikus erfüllt, und geben Sie das Ergebnis zurück.

Sie können das Ergebnis in einem der folgenden Formate zurückgeben:

  • Ein wahrer Wert, wenn das Gedicht ein Haiku und ein falsches ist.
  • Ein falscher Wert, wenn das Gedicht ein Haiku ist und ein wahrer sonst.
  • Ein Wert aus einem endlichen Wertebereich, der in der Einreichung angegeben ist, wenn das Gedicht ein Haiku ist, und ein Wert aus einem sich gegenseitig ausschließenden endlichen Wertebereich, der ebenfalls in der Einreichung angegeben ist.

Sie können auch davon ausgehen, dass das Gedicht keine nicht-alphabetischen Zeichen enthält, aber Sie können nicht davon ausgehen, dass es vollständig in Groß- oder Kleinbuchstaben geschrieben ist.

Für die Zwecke dieser Herausforderung Yist ein Vokal.

Testfälle

Wahrheit

This is a haiku
Yes it truly is one
See what I did man

I am so tired
of writing this already
when can I stop this

Writing another
Of these horrific things
Come on please

Consonant only
Counts as one syllable
ghjk tgh knmb wrts vbc

Falsch

oh boy writing non haiku is so much easier

This is
so good
on my
poor dear brain

The syllables do not match
at least I do not think so
I have not checked

It does not really matter
these test cases will help
At least I think they will

I am done here
This is enough
Goodbye

Wertung

Da dies
die kürzeste Antwort
viel Glück für Sie alle gewinnen

Textlich
quelle
Sandbox
LyricLy
Related
LyricLy

Antworten:

4

Jelly ,  25  23 Bytes

-2 danke an Erik den Outgolfer (benutze eine Liste von Linien als Eingabe)

e€Øy0;ŒgP€
ḲLÐfÇ€ḣ8µ€ḣ4

Ein monadischer Link, der eine Liste von Zeichenlisten (die Zeilen) aufnimmt und eine Liste von Listen mit Nullen und Einsen zurückgibt. Ein gültiges Haiku hat die Länge 3, und wenn eine der tiefsten Listen, die eine einzelne Null sind, durch eine einzelne ersetzt wird, beträgt die Summe der abgeflachten Listen 5, 7 bzw. 5. Die Bildung (ob Läufe von Buchstaben Konsonanten sind und nur auf nur 4 Leitungen , die die ersten 8 Wörter von jeweils bis Einnahme) gewährleistet , es gibt nur finite jedes der gültigen und ungültigen Bereiche.

Probieren Sie es online! oder schauen Sie sich die (noch verwirrendere!) Testsuite an


Hier ist eine viel einfacher zu verwendende  32  30-Byte- Version, die einfach 1 oder 0 ausgibt:

e€Øy0;ŒgP€SȯL$
ḲLÐfÇ€Sµ€⁼5,7,5

Probieren Sie dieses aus oder sehen Sie sich die Testsuite an .

Jonathan Allan
quelle
Ich denke nicht, dass die "Reichweite" von Nicht-Haiku-Möglichkeiten begrenzt ist - Sie können eine unbegrenzte Anzahl von Wörtern / Zeilen in diesen haben.
Ørjan Johansen
Oh verdammt, als die Änderung vorgenommen wurde, dachte ich, dass nur die Haiku-Reichweite endlich sein muss. Das bringt es auf die 32 Bytes zurück, denke ich.
Jonathan Allan
OK für vier Bytes adressiert, indem Wörter pro Zeile auf acht und Zeilen auf vier begrenzt werden.
Jonathan Allan
Ich denke, Sie können entfernen Ỵµ, wie Sie eine Liste von Zeilen nehmen können.
Erik der Outgolfer
3

JavaScript (ES6), 84 75 Byte

Nimmt die Eingabe als Liste von Wortlisten. Rückgabe truefür Haiku oder falseNicht-Haiku.

a=>a.map(s=>(s.map(w=>w.match(/[aeiouy]+/gi))+'').split`,`.length)=='5,7,5'

Testfälle

Arnauld
quelle
2

Retina , 49 Bytes

i`[aeiouy]+
1
T`lL`2
2*12+
3
[12]+
3
%M`3
^5¶7¶5$

Probieren Sie es online!

Ausgänge 1für Haiku, 0für Nicht-Haiku.

fireflame241
quelle
@FryAmTheEggman Das hat funktioniert, außer ich musste hinzufügen ^und $weil xHaikus in einer Reihe xals Zeichenfolge geben würden .
fireflame241
1
Ich denke, das könnte für 45 Bytes funktionieren.
Neil
2

Python 2 , 126 125 120 121 Bytes

lambda s:[len(split('\s+',sub('[aeiouy][^aeiouy ]+','X ',t,0,I).strip()))for t in s.split('\n')]==[5,7,5]
from re import*

Probieren Sie es online!

Chas Brown
quelle
Bei Ihrer letzten Änderung wurde die Anforderung verletzt, dass Wörter, die nur aus Konsonanten bestehen, als eine Silbe gelten.
Ørjan Johansen
@ Ørjan Johansen: Behoben; Danke!
Chas Brown
in 116B
Traut
1
Sie können einige einfache Bytes entfernen, indem Sie die Eingabe als eine Liste von Zeilen nehmen und s.split () s
Rɪᴋᴇʀ
1

Sauber , 162 ... 115 Bytes

import StdEnv,StdLib
@t=[sum[max(sum(map hd(group[sum[1\\v<-:"AaEeIiOoUuYy"|c==v]\\c<-w])))1\\w<-l]\\l<-t]==[5,7,5]

Definiert die Funktion @, das Nehmen [[[Char]]](Liste der Wörter) und das Geben Bool.
Gibt zurück, Truewenn die Eingabe Falseansonsten ein Haiku ist .

Probieren Sie es online!

Οurous
quelle
Scheint im Eckfall nur für Konsonanten zu scheitern.
Ørjan Johansen
@ ØrjanJohansen behoben
--urous
1

Mathematica 119 Bytes

Hier ist eine Version, die den angegebenen Regeln für Silben entspricht:

Tr/@Map[Length@StringCases[#,("a"|"e"|"i"|"o"|"u"|"y")..]/. 0->1&,(s=StringSplit)/@s[ToLowerCase@#,"\n"],{2}]=={5,7,5}&

Hier ist eine 83-Byte-Version, die tatsächlich Silben zählt:

Tr/@Map[Length@WordData[#,"Hyphenation"]&,(s=StringSplit)/@s[#,"\n"],{2}]=={5,7,5}&

z.B

%@"This is a haiku
Yes it truly is one
See what I did man"

Gibt zurück, Falseda die zweite Zeile sechs statt der erforderlichen sieben Silben enthält.

Kelly Lowder
quelle
Dies schlägt fehl, da die Herausforderung explizit ihre eigene Silbenzahl definiert, die keine normalen englischen Regeln verwendet.
Ørjan Johansen
Danke, dass du nicht abstimmst. Ich sehe einen Versuch, eine Silbe zu definieren, aber es ist nicht klar. Ich vermute, "eins" hat zwei Silben nach dieser Definition. Sieht so aus, als würden Leute nur zusammenhängende Vokale zählen.
Kelly Lowder
Fast, aber Wörter ohne Vokale zählen als eine Silbe. Siehe die Fragenkommentare. Ich nehme an, es ist nur verwirrend, was mit Konsonantengruppen zu tun ist, aber das hat keinen Einfluss auf die endgültige Zählung.
Ørjan Johansen
"Eins" hat zwei Vokale und sie sind nicht zusammenhängend.
Kelly Lowder
Richtig, sie zählen also als zwei Silben.
Ørjan Johansen