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
, sk
lub spl
) lub grupa samogłoski (na przykład i
, ea
i 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 example
składa się z trzech sylab ex
, am
oraz ple
. ple
nie ma końca, ponieważ zostało skrócone do końca słowa.
Jako inny przykład, słowo syllable
ma również trzy sylaby syll
, abl
i e
, które również nie mają końca.
W końcowym przykładzie słowo word
ma 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 Y
jest 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 kod-golf
Najkrótsza odpowiedź wygra
Powodzenia wszystkim
źródło
Odpowiedzi:
Galaretka ,
2523 bajtów-2 dzięki Erikowi Outgolferowi (użyj listy linii jako danych wejściowych)
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:Wypróbuj ten lub zobacz jego pakiet testowy .
źródło
Ỵµ
, ponieważ możesz wziąć listę linii.JavaScript (ES6),
8475 bajtówPobiera dane wejściowe jako listę list słów. Zwraca
true
za haiku lubfalse
nie-haiku.Przypadki testowe
Pokaż fragment kodu
źródło
Siatkówka , 49 bajtów
Wypróbuj online!
Wyjścia
1
dla haiku,0
dla innych niż haiku.źródło
^
i$
ponieważx
haikus z rzędu dałbyx
jako ciąg.Python 2 ,
126125120121 bajtówWypróbuj online!
źródło
s
Perl 5 , 63 + 1 (
-p
) = 64 bajtyWypróbuj online!
źródło
Czysty ,
162... 115 bajtówDefiniuje funkcję
@
, biorąc[[[Char]]]
(listę słów) i dawaniaBool
.Zwraca
True
gdy wejście jest haiku, wFalse
przeciwnym razie.Wypróbuj online!
źródło
Mathematica 119 bajtów
Oto wersja zgodna z podanymi regułami dla sylab:
Oto 83-bajtowa wersja, która faktycznie liczy sylaby:
na przykład
zwraca,
False
ponieważ druga linia ma sześć sylab zamiast wymaganych siedmiu.źródło