Haiku mu?


19

Yani bir haiku oluşturmak istiyorsunuz, ancak bir haiku için hece kurallarına uyup uymadığından emin değilsiniz.

Genelde yaptığım gibi düzgün bir bulanıklık yazmaktan rahatsız olamazdım, bu yüzden bunu yapmak zorunda kalacaksınız. Hadi hemen içeri saplanalım.

Vahşi doğada bir haiku bulmak

Bu zorluğun amaçları için, verilen şiirin bu kriterleri karşılayıp karşılamadığını kontrol edeceğiz:

  • Üç satır var.
  • İlk satırda 5 hece vardır.
  • İkinci satırda 7 hece vardır.
  • Üçüncü satırda 5 hece vardır.

Her satır, boşluk gruplarıyla ayrılmış bir veya daha fazla kelimeden oluşur. Bu kelimeler mutlaka geçerli İngilizce kelimeler değildir.

Her kelime hecelere bölünür ve sonra bu heceler, hattın toplam hece sayısını elde etmek için sayılır.

Bir hece 2 veya 3 bölümden oluşur: başlangıç, bitiş ve muhtemelen orta. Her bölüm, ya (aynı zamanda bir ünsüz küme olarak bilinen, örneğin, consonsants bir grup olduğu s, skya da spl) ya da sesli bir grup (örneğin i, eaya da oui).

Başlangıç ​​bir ünsüz grubu ise, orta bir sesli harf grubu ve son bir grup ünsüz olacaktır. Başlangıç ​​bir ünlüler grubuysa, son bir grup ünsüz olacak ve orta olmayacak.

Örneğin, kelime exampleüç heceden oluşur ex, amve ple.plekelimenin sonu ile kısa kesildiği için sonu yok.

Başka bir örnek olarak, kelimenin syllableüç hecesi de vardır syll, ablvee aynı zamanda bir sona sahip olan,.

Son bir örnekte, kelimenin wordbir hecesi vardır,word bir ünsüz ile biten .

Meydan okuma

Bir dize, dize listesi, liste listesi veya başka bir makul biçim verildiğinde en az bir satırlı bir şiiri temsil eden verildiğinde, yukarıda özetlenen bir haiku ölçütlerini karşılayıp karşılamadığını belirleyin ve sonucu döndürün.

Sonucu şu biçimlerden birinde döndürebilirsiniz:

  • Şiir bir haiku ve bir sahte olan ise gerçek bir değer.
  • Şiir bir haiku ve doğrudur.
  • Şiir bir haiku ise, gönderimde belirtilen sonlu değerler aralığındaki bir değer ve gönderimde de belirtilen karşılıklı olarak ayrı bir sonlu değerler aralığındaki bir değer.

Şiirin alfabetik olmayan karakterler içerdiğini varsayabilirsiniz, ancak bunun tamamen büyük veya küçük harf olduğunu varsaymayabilirsiniz.

Bu zorluğun amaçları için, Y , bir sesli harftir.

Test senaryoları

Doğru

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

puanlama

Bu
En kısa cevap
hepinize iyi şanslar kazanacaktır



Yanıtlar:


4

Jöle ,  25  23 bayt

Outgolfer Erik sayesinde -2 (giriş olarak bir satır listesi kullanın)

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

Karakter listelerinin (satırların) listesini alan ve sıfırlar ve karakterlerin listelerinin listesini döndüren monadik bir bağlantı. Geçerli haiku uzunluğu 3 olacak ve tek bir sıfır olan en derin listelerden herhangi biri tek bir ile değiştirildikten sonra, düzleştirilmiş listelerin toplamı sırasıyla 5, 7 ve 5 olacaktır. Formasyonu (ister çalışır harflerin sessizler ve ancak sadece 4 satır kadar her birinin ilk 8 kelimeler alınıp olan) sadece sonlu geçerli ve geçersiz aralıklarının her birinin orada olmasını sağlar.

Çevrimiçi deneyin! veya (daha da kafa karıştırıcı!) test paketini görün


İşte 1 veya 0 çıktısıyla  32  30 baytlık sürümü kullanmak çok daha kolay :

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

Bunu deneyin veya test paketini görün .


Haiku olmayan olasılıkların "aralığı" nın sonlu olduğunu düşünmüyorum - bunlarda sınırsız sayıda kelime / satır olabilir.
Ørjan Johansen

Lanet olsun değişiklik yapıldığında sadece sınırlı olması gereken haiku aralığı olduğunu düşündüm. Sanırım 32 byter'a geri getiriyor.
Jonathan Allan

Tamam, satır başına kelimeleri sekiz ve satırları dörde sınırlayarak dört bayt için adreslendi.
Jonathan Allan

Bence Ỵµbir çizgi listesi alabileceğiniz gibi kaldırabilirsiniz .
Outgolfer Erik

3

JavaScript (ES6), 84 75 bayt

Girdileri sözcük listelerinin listesi olarak alır. İade truehaiku veya falseolmayan haiku için.

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

Test senaryoları


2

Retina , 49 bayt

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

Çevrimiçi deneyin!

1Haiku 0için çıkışlar , haiku olmayanlar için.


Ben eklemek zorunda hariç @FryAmTheEggman Yani, çalışmış ^ve $çünkü xüst üste haikus verecek xbir dize olarak.
fireflame241

1
Bence bu 45 bayt için işe yarayabilir.
Neil



1

Temiz , 162 ... 115 bayt

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]

İşlevi @, alma [[[Char]]](sözcük listesi) ve verme işlevini tanımlar Bool.
İade Truegirişi, bir haiku olduğunu Falseaksi.

Çevrimiçi deneyin!


Yalnızca ünsüz sözcük köşesi durumunda başarısız gibi görünüyor.
Ørjan Johansen

@ ØrjanJohansen sabit
18'de

1

Mathematica 119 Bayt

Heceler için verilen kurallara uyan bir sürüm:

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

İşte heceleri sayan 83 baytlık bir sürüm:

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

Örneğin

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

Falseikinci satırda gerekli yedi yerine altı hece olduğu için geri döner .


Bu başarısız olur çünkü meydan okuma, sıradan İngilizce kuralları kullanmayan kendi hece sayısını açıkça tanımlar.
Ørjan Johansen

Peki aşağı indirmediğin için teşekkürler. Hece tanımını denedim, ama belli değil. Sanırım "bir" bu tanımda iki heceye sahip. Görünüşe göre insanlar bitişik ünlüleri sayıyorlar.
Kelly Lowder

Neredeyse, ama sesli harfleri olmayan kelimeler bir hece olarak sayılır. Soru yorumlarına bakın. Sanırım sadece ünsüz gruplar hakkında ne yapılacağı konusunda kafa karıştırıcı, ama bu aslında son sayıyı etkilemiyor.
Ørjan Johansen

"Bir" in iki sesli harfi vardır ve bitişik değildir.
Kelly Lowder

Doğru, yani iki hece sayılırlar.
Ørjan Johansen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.