Uh, czy to jest haiku?

19

Więc chcesz stworzyć haiku, ale nie jesteś pewien, czy będzie ono zgodne z sylabowymi zasadami haiku.

Nie mogłem zadać sobie trudu, aby napisać odpowiedni napis jak zwykle, więc będziesz musiał się z tym pogodzić. Utknijmy od razu.

Znalezienie haiku na wolności

Na potrzeby tego wyzwania sprawdzimy, czy dany wiersz spełnia następujące kryteria:

  • Istnieją trzy linie.
  • Pierwsza linia ma 5 sylab.
  • Druga linia ma 7 sylab.
  • Trzecia linia ma 5 sylab.

Każda linia składa się z jednego lub więcej słów, oddzielonych grupami spacji. Te słowa niekoniecznie są poprawnymi słowami angielskimi.

Każde słowo jest dzielone na sylaby, a następnie te sylaby są liczone, aby uzyskać całkowitą liczbę sylab linii.

Sylaba składa się z 2 lub 3 części: początku, końca i ewentualnie środka. Każda część jest albo grupą consonsants (znany również jako spółgłosek, jak s, sklub spl) lub grupa samogłoski (na przykład i, eai oui).

Jeśli początek jest grupą spółgłosek, środek będzie grupą samogłosek, a koniec grupą spółgłosek. Jeśli początek jest grupą samogłosek, koniec będzie grupą spółgłosek i nie będzie środka.

Na przykład słowo exampleskłada się z trzech sylab ex, amoraz ple. plenie ma końca, ponieważ zostało skrócone do końca słowa.

Jako inny przykład, słowo syllablema również trzy sylaby syll, abli e, które również nie mają końca.

W końcowym przykładzie słowo wordma jedną sylabę word, która kończy się grupą spółgłosek.

Wyzwanie

Biorąc pod uwagę ciąg, listę ciągów, listę list lub inny rozsądny format reprezentujący wiersz z co najmniej jedną linią, ustal, czy spełnia on kryteria haiku opisane powyżej i zwróć wynik.

Możesz zwrócić wynik w dowolnym z następujących formatów:

  • Prawdziwa wartość, jeśli wiersz jest haiku, a fałsz w przeciwnym razie.
  • Fałszywa wartość, jeśli wiersz jest haiku, a prawda jest inna.
  • Wartość ze skończonego zakresu wartości określonych w przedłożeniu, jeśli wiersz jest haiku, oraz wartość z wzajemnie wykluczającego się skończonego zakresu wartości określonych również w przedłożeniu.

Możesz także założyć, że wiersz nie zawiera znaków niealfabetycznych, ale nie możesz zakładać, że jest on pisany wyłącznie dużymi lub małymi literami.

Dla celów tego wyzwania Yjest samogłoska.

Przypadki testowe

Prawda

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

Falsy

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

Punktacja

Ponieważ jest to
Najkrótsza odpowiedź wygra
Powodzenia wszystkim

LyricLy
źródło
Piaskownica
LyricLy
Powiązane
LyricLy

Odpowiedzi:

4

Galaretka ,  25  23 bajtów

-2 dzięki Erikowi Outgolferowi (użyj listy linii jako danych wejściowych)

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

Monadyczny link pobierający listę list znaków (wiersze) i zwracający listę list zer i jedynek. Prawidłowe haiku będzie mieć długość 3, a gdy dowolna z najgłębszych list, które są jednym zerem, zostanie zastąpiona jedną, suma spłaszczonych list będzie wynosić odpowiednio 5, 7 i 5. Powstawanie (czy działa listów są spółgłoski i tylko przy pierwszych 8 słów każdy z maksymalnie tylko 4 linie) zapewnia istnieją tylko skończone każdego z ważnych i nieważnych zakresach.

Wypróbuj online! lub zobacz (jeszcze bardziej mylące!) zestaw testów


Oto o wiele łatwiejsza w użyciu  32-  bajtowa wersja, po prostu wyświetlająca 1 lub 0:

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

Wypróbuj ten lub zobacz jego pakiet testowy .

Jonathan Allan
źródło
Nie sądzę, że „zakres” możliwości innych niż Haiku jest skończony - możesz mieć w nich nieograniczoną liczbę słów / linii.
Ørjan Johansen
O cholera, kiedy dokonano zmiany, myślałem, że tylko zasięg haiku musi być skończony. Myślę, że to przywraca 32 bajt.
Jonathan Allan
OK adresowane do czterech bajtów, ograniczając słowa w wierszu do ośmiu i wierszy do czterech.
Jonathan Allan
Myślę, że możesz usunąć Ỵµ, ponieważ możesz wziąć listę linii.
Erik the Outgolfer
3

JavaScript (ES6), 84 75 bajtów

Pobiera dane wejściowe jako listę list słów. Zwraca trueza haiku lub falsenie-haiku.

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

Przypadki testowe

Arnauld
źródło
2

Siatkówka , 49 bajtów

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

Wypróbuj online!

Wyjścia 1dla haiku, 0dla innych niż haiku.

fireflame241
źródło
@FryAmTheEggman To działało, tyle że musiałem dodać ^i $ponieważ xhaikus z rzędu dałby xjako ciąg.
fireflame241
1
Myślę, że może to działać na 45 bajtów.
Neil
2

Python 2 , 126 125 120 121 bajtów

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*

Wypróbuj online!

Chas Brown
źródło
Twoja ostatnia edycja złamała wymóg, aby słowa zawierające tylko spółgłoski liczyły się jako 1 sylaba.
Ørjan Johansen
@ Ørjan Johansen: Naprawiono; dzięki!
Chas Brown
w 116B
Traut
1
Możesz zagrać w golfa na kilka łatwych bajtów, pobierając dane jako listę linii i zastępując s.split () po prostus
Rɪᴋᴇʀ
1

Czysty , 162 ... 115 bajtów

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]

Definiuje funkcję @, biorąc [[[Char]]](listę słów) i dawania Bool.
Zwraca Truegdy wejście jest haiku, w Falseprzeciwnym razie.

Wypróbuj online!

Obrzydliwe
źródło
Wydaje się, że zawodzi w przypadku narożnika tylko słowa spółgłoskowego.
Ørjan Johansen
@ ØrjanJohansen naprawiony
Οurous
1

Mathematica 119 bajtów

Oto wersja zgodna z podanymi regułami dla sylab:

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

Oto 83-bajtowa wersja, która faktycznie liczy sylaby:

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

na przykład

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

zwraca, Falseponieważ druga linia ma sześć sylab zamiast wymaganych siedmiu.

Kelly Lowder
źródło
Nie udaje się to, ponieważ wyzwanie wyraźnie określa własną liczbę sylab, która nie korzysta ze zwykłych angielskich reguł.
Ørjan Johansen
Dzięki za nie oddanie głosu. Widzę próbę zdefiniowania sylaby, ale nie jest to jasne. Zgaduję, że „jeden” ma dwie sylaby według tej definicji. Wygląda na to, że ludzie liczą tylko ciągłe samogłoski.
Kelly Lowder
Prawie, ale słowa bez samogłosek są liczone jako jedna sylaba. Zobacz komentarze do pytania. Przypuszczam, że jest to mylące, co zrobić z grupami spółgłoskowymi, ale tak naprawdę nie wpływa to na ostateczną liczbę.
Ørjan Johansen
„jeden” ma dwie samogłoski i nie są one ciągłe.
Kelly Lowder
Racja, więc liczą się jako dwie sylaby.
Ørjan Johansen