えっと、俳句ですか?


19

したがって、俳句を作成したいのですが、俳句の音節規則に従っているかどうかはわかりません。

私はいつものように適切な宣伝文句を書くことを気にすることができなかったので、あなたはこれで間に合わせる必要があります。すぐに立ち往生しましょう。

野生で俳句を見つける

この挑戦のために、与えられた詩がこれらの基準を満たしているかどうかを確認します。

  • 3行あります。
  • 最初の行には5つの音節があります。
  • 2行目には7つの音節があります。
  • 3行目には5つの音節があります。

各行は、スペースのグループで区切られた1つ以上の単語で構成されます。これらの単語は必ずしも有効な英語の単語ではありません。

各単語は音節に分割され、それらの音節がカウントされて行の総音節カウントが取得されます。

音節には、2つまたは3つの部分があります。開始、終了、および場合によっては中間です。各部分は、子音のグループ(sskまたはなどの子音クラスターとも呼ばれるspl)または母音のグループ(ieaまたはなどoui)のいずれかです。

始まりが子音のグループである場合、真ん中は母音のグループになり、終わりは子音のグループになります。始まりが母音のグループである場合、終わりは子音のグループであり、中間はありません。

例えば、ワードはexample、3つの音節で構成されexamそしてpleple単語の終わりまでに短縮されたため、終わりはありません。

別の例として、単語はsyllableまた、3つの音節を有しsyllablそしてe、また、全く結末を持ちません。

最後の例として、単語にwordは1つの音節がありword、子音のグループで終わります。

チャレンジ

文字列、文字列のリスト、リストのリスト、または少なくとも1行の詩を表すその他の妥当な形式が与えられた場合、上記の俳句の基準を満たしているかどうかを判断し、結果を返します。

次の形式のいずれかで結果を返すことができます。

  • 詩が俳句である場合は真実の値、そうでない場合は偽の値。
  • 詩が俳句の場合は偽の値、それ以外の場合は真実の値。
  • 詩が俳句である場合に提出で指定された値の有限範囲からの値、および提出で指定された相互に排他的な値の範囲からの値。

また、詩にアルファベット以外の文字が含まれていないと仮定することもできますが、完全に大文字または小文字であると仮定することはできません。

この課題のためにY、母音です。

テストケース

真実の

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

偽物

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

得点

これはので、
最短回答が勝ち
ます



回答:


4

ゼリー 25  23 バイト

-2 Erik the Outgolferに感謝(入力として行のリストを使用)

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

文字(行)のリストのリストを取り、0と1のリストのリストのリストを返すモナドリンク。有効な俳句の長さは3で、単一のゼロである最も深いリストのいずれかが単一のリストに置き換えられると、フラット化されたリストの合計はそれぞれ5、7、および5になります。フォーメーション(文字の連続が子音であり、最大4行までの各行の最初の8語のみを取得するかどうか)は、有効範囲と無効範囲のそれぞれが有限であることを保証します。

オンラインでお試しください!または(さらに複雑な!)テストスイートを見る


 32 または30バイトバージョンを使用して、1または0を出力するだけの簡単な方法を次に示します。

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

これを試すか、そのテストスイートを見てください。


非俳句の可能性の「範囲」は有限だとは思わない-あなたはそれらに無限の数の単語/行を持つことができる。
Ørjanヨハンセン

変更が行われたとき、私はそれが俳句の範囲だけが有限である必要があると思いました。それは私が思うに、32バイトにそれを戻します。
ジョナサンアラン

1行あたりのワード数を8に、行数を4に制限することで、4バイトに対応しました。
ジョナサンアラン

Ỵµ行のリストを取得できるので、を削除できると思います。
エリックアウトゴルファー

3

JavaScript(ES6)、84 75バイト

単語のリストのリストとして入力を受け取ります。true俳句またはfalse非俳句の返品。

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

テストケース



2

パイソン2126の 125 120 121バイト

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*

オンラインでお試しください!


最後の編集により、子音のみの単語は1音節としてカウントされるという要件を破りました。
Ørjanヨハンセン

@ØrjanJohansen:修正; THX!
チャスブラウン


1
あなただけのゴルフいくつかは、簡単に(行のリストとして入力を取ることによって、オフバイト、およびs.splitを交換する)ことができますs
Rɪᴋᴇʀ


1

クリーン162 ... 115バイト

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]

関数を定義し、(単語のリストのリスト)@を取り[[[Char]]]、与えBoolます。入力が俳句の場合に
戻ります。それ以外の場合に戻ります。TrueFalse

オンラインでお試しください!


子音のみの単語コーナーで失敗するようです。
Ørjanヨハンセン

ØrjanJohansen@固定
Οurous

1

Mathematica 119バイト

音節の指定されたルールに準拠するバージョンは次のとおりです。

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

実際に音節を数える83バイトのバージョンは次のとおりです。

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

例えば

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

False2行目には必要な7音節ではなく6音節があるため戻ります。


チャレンジでは、通常の英語の規則を使用しない独自の音節カウントが明示的に定義されるため、これは失敗します。
Ørjanヨハンセン

ダウン投票しないでくれてありがとう。私は音節の定義を試みていますが、はっきりしていません。この定義では、「1」には2つの音節があると推測しています。人々はただ連続した母音を数えているように見えます。
ケリーロウダー

ほとんどですが母音のない単語は1音節としてカウントされます。質問のコメントを参照してください。子音グループについて何をすべきか混乱しているだけかもしれませんが、実際には最終的なカウントには影響しません。
Ørjanヨハンセン

「1」には2つの母音があり、それらは隣接していません。
ケリーロウダー

そう、彼らは2つの音節として数えます。
Ørjanヨハンセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.