(本日はかなり理屈っぽい、しんどい内容となっています(^^;)
日本語の文字をコンピュータ上で表現するには1文字あたり2バイトの容量が必要となる。
すると、17文字で構成される俳句は、僅か34バイトで保存できることとなる。
とすると、32GBのUSBメモリを準備すれば、10億句近い数の俳句を保管することができる。
さて、なんでまた俳句のことなんか考えたかというと、「お~いお茶」の「新俳句大賞」が原因だったりする。
あれ、なんとなく、読んでしまいませんか?
そして、どれも大して出来は良くない。
それならば、初めっからプログラムに俳句を作らせてみてはどうか?……なんてことを思いついた。
で、「新俳句大賞」に自動で応募しまくるプログラムを作成すれば、いくつかは入賞し、賞金がもらえ、ウハウハ。
そもそも品のない僕は、すぐにそんなことを考えてしまうw
実際に作れば、いわゆる「Dos攻撃」というやつに該当し、めでたく犯罪者となるかもしれない。
まぁ、想像するだけならば楽しいし、害はない。
問題はそのロジック。AIなんて手の込んだものは作れそうにない。本気で作ろうと思うのであれば、単語とか文脈の辻褄を合わせる必要があるだろう。
どうせネタなんだから、意味を考えず、ただただ文字を並べるだけであれば、簡単に作れる。しかし、実用性はないだろう。
どうせネタなんだから、実用性なんかなくてもいいかw
そこまで考えて、「全ての可能な文字列。全ての本はその中に含まれている。」って言葉を思い出した。
これは芥川賞作家、円城塔の『Self-Reference ENGINE』の冒頭だ。
いきなり本を文字列の下位集合に持ってくる本ってのもスゴイ話で。僕のお気に入りの1つとなっている。
さて、数学的に正しいことは正しいが、文字数制限もないため、下位集合の要素数ですら無限大となり、実は本の可能性も無限大なワケだったりする。
しかし、これを文字数制限のある俳句に当てはめると事情は一気に変わる。
書き換えると、「全ての17文字の文字列。全ての俳句はその中に含まれている。」ということになる。
そう、俳句の可能性は有限なのだ。
(計算を簡略化するために「字足らず」「字余り」は考えないこととする。また、種田山頭火のような明らかに型破りなものも除く。)
俳句を計算するにあたり、まずは日本語の音をしっかりと確認しておく。
「50音」なんて言葉があるが、濁点付くものなどを含めると、明らかにこれよりも多くなる。
正確に確認できるよう、下に表を準備した。
この表の通り、俳句に使える文字は105文字と考えてよいだろう。
すると、「全ての17文字の文字列」とは105の17乗通りあることになる。
計算してみると、22,920,183,178,010,300,000,000,000,000,000,000パターン存在することになる。
ちょっとイメージしにくい数字だ。
「億」とか「兆」といった単位を使って表そうとしても、「2292溝183穰1780秭1030垓」となり、見慣れた単位は出てこない。(「垓」の次に「京」が続き、その次にやっと「兆」が出てくる)
ならば、大きい単位に強そうなバイトで計算してみれば……と思い当たる。
まずは、一句あたり、34バイトであることに注目し、34をかける。
すると、これらの俳句全て合わせると、779,286,228,052,351,000,000,000,000,000,000,000バイトであることが分かる。
これは、概ね6,446憶YB(ヨタバイト)である。
「よたばいと」ってなんだよ!って話だ。
※キロ⇒メガ⇒ギガ⇒テラ⇒ペタ⇒エクサ⇒ゼタ⇒ヨタ)
すべての俳句を個人用のパソコンで検証するのは、現実的でないことだけは確かなようだ。
しかし、有限であるということはコンピュータの性能の向上で、なんとかなる問題ということも確かだ。
そういった意味では「2292溝183穰1780秭1030垓通りの組み合わせ」というのは、現実的な数とも思える。
要するに、どれだけ頑張ろうが、俳句は2292溝183穰1780秭1030垓パターン以上は作れないということだ。
「ふるいけや かわずとびこむ みずのおと」という文字列も「2292溝183穰1780秭1030垓通りの組み合わせ」の中に含まれていると思うと、なんだかスゴイと思う?
上述の俳句自動作成プログラム、書いてみたら15行くらいでサクッと書けてしまった。
なので、ここに記載してみる。steemitでjavascriptが動くなら、動くだろう……と、思ったら、セキュリティ的に投稿すらできなかった(^^;
そのうちどこか動く環境に貼って公開するかもしれません。
※以下、プログラム
<input type="button" onclick="makeHaiku();" value="俳句を作る">
<script>
function makeHaiku(){
var mojiretsu = ["あ","い","う","え","お","か","き","く","け","こ","さ","し","す","せ","そ","た","ち","つ","て","と","な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ","ま","み","む","め","も","や","ゆ","よ","ら","り","る","れ","ろ","わ","を","ん","が","ぎ","ぐ","げ","ご","ざ","じ","ず","ぜ","ぞ","だ","ぢ","づ","で","ど","ば","び","ぶ","べ","ぼ","ぱ","ぴ","ぷ","ぺ","ぽ","きゃ","きゅ","きょ","しゃ","しゅ","しょ","ちゃ","ちゅ","ちょ","にゃ","にゅ","にょ","ひゃ","ひゅ","ひょ","みゃ","みゅ","みょ","りゃ","りゅ","りょ","ぎゃ","ぎゅ","ぎょ","じゃ","じゅ","じょ","びゃ","びゅ","びょ","ぴゃ","ぴゅ","ぴょ","っ"]
var random
var haiku = ""
for(var i=0;i<17;i++){
random = Math.floor(Math.random() * 105);
haiku += mojiretsu[random]
if (i == 4 || i == 11){
haiku += " ";
}
}
alert(haiku)
}
</script>
こういうの考えるの、面白いですよね。
興味深く読ませていただきました(笑)
読んでいただきありがとうございますm(__)m
考えて書いてる分には凄く楽しいです♪
読んで面白いものになっているかどうか、不安が残りますがw
matenroさんのページも見たんですが……俳句を書かれている方だったんですね(^^;
こんなフザケタ内容の記事でごめんない……m(__)m
いえいえ、私のは遊びですから(笑) それより、こういうアプローチって斬新だなぁと目からウロコでしたよ。
「俳句を計算する」という表現が面白いと思いました。
読んでいただきありがとうございますm(__)m
まさに計算した結果報告な感じです(^^;