「#俳句プログラミング プチコンテスト 2015」ピックアップ Vol. 1

2015/03/03Development,EventBASIC,C#,F#,Ruby,なでしこ,俳句プログラミング

慧: こんにちは! 「俳句プログラミング プチコンテスト」の応募されたコードをピックアップして紹介していくよ。毎回言うけど、別に良い悪いって話じゃないからね! たくさん応募があるから、他の人のコードを参考にアップデートしてもいいし、バグがあったらつっこむのもアリだよ!

みんなのツイート

みんなのコードを見るには、Togetter まとめ から。たくさん応募待ってるよ~。

ピックアップ No.1 (なでしこ)

ひとつ目は、最初の応募作品。「ソースコードで俳句」部門だね。


# @3846masa
尋ねたら
それを2で割り
言ってやる

view raw

haiku_01.nako

hosted with ❤ by GitHub

なでしこだと、575 できちゃうんだね。季語が難しそうだけど。

ピックアップ No.2 (F#)

次は、F# で縦書き表示だね。今回いろいろなコードを募集しているけど、お題に困ったら縦書き表示のプログラムを応募してみてね。

https://twitter.com/Myoga1012/status/570856300931719169


// コマンドライン引数に俳句を半角スペースで5・7・5に区切って入力してから、実行します。
[<EntryPoint>]
let main argv =
// 文字数1番多い行の文字数を求めます。
let max = ( argv |> Seq.maxBy( fun a -> a.Length ) ).Length
// 各行は上で求めた文字数になるように、全角スペースで末尾をパディングします。
let argv2 = argv |> Array.map( fun a -> a.PadRight( max, ' ' ) )
// 文字列のを縦書きになるように並び替えて、出力します。
Array.init max ( fun i -> System.String( [| for j in 0..argv2.Length – 1 -> argv2.[j].[i] |] |> Array.rev ) )
|> Array.iter( fun v -> v |> printfn "%s" )
0

view raw

Haiku2.fs

hosted with ❤ by GitHub

俳句自体は、コマンドライン引数に 5 7 5 に区切って入力っていう方法だね。

ピックアップ No.3 (C++)

続いて、C++。これは、俳句を出力しているし、コード中に俳句も書かれているパターンだよ。


#include <iostream>
using namespace std;
#define kakikueba int main() { cout << "huruikeya\n";
#define kaneganarunari cout << "kawazutobikomu\n";
#define houryuuji cout << "mizunooto\n"; return 0;}
kakikueba
kaneganarunari
houryuuji

view raw

haiku.cpp

hosted with ❤ by GitHub

ピックアップ No.4 (CoffeeScript + HTML)

次は、CoffeeScript。

https://twitter.com/MysticDoll/status/570938725191933952

https://twitter.com/MysticDoll/status/570951449808515072


do ->
poems = [
{creator: "正岡子規", kamigo: "赤とんぼ", nakashichi: "筑波に雲も", shimogo: "無かりけり"},
{creator: "松尾芭蕉", kamigo: "五月雨を", nakashichi: "集めてはやし", shimogo: "最上川"}
]
haikuVM = new Vue
data:
haikus: poems
haikuVM.$mount '#haiku'
return

view raw

HaikuVue.coffee

hosted with ❤ by GitHub


<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/0.11.5/vue.min.js"></script>
<style>h3{white-space: pre }</style>
</head>
<body>
<div id="haiku">
<div v-repeat="haikus">
<h1>{{creator}}</h1>
<h3> {{kamigo}}</h3>
<h3> {{nakashichi}}</h3>
<h3> {{shimogo}}</h3>
</div>
</div>
<script src="./haikuVue.js"></script>
</body>
</html>

view raw

haikuView.html

hosted with ❤ by GitHub

単純に俳句を表示する部類に入ると思うけど、Vue.js というデータバインディングライブラリを使った作品。後発のライブラリで、軽量・高速が特徴みたいだよ。

ピックアップ No.5 (RFO BASIC)

次は、BASIC! で、Android 環境だよ。RFO BASIC! for Android という環境を利用しているみたい。

私の画像データも活用してくれている作品で、オリジナルの俳句を表示しているよ。

コードは、長すぎるので省略! 画像データも base64 形式でコードに埋め込まれているから、すごいことに……。

ピックアップ No.6 (SmileBASIC)

次は、プチコンの SmileBASIC。

縦書き変換のプログラムに加えて、27行目の TALK 命令で、音声出力もあるのがポイントかな。プチコンならではの手軽さだね。

ピックアップ No.7 (BASIC)

次は、ポケコン SHARP PC-1260 で BASIC!


10 CLS
20 DIM S$(3)*24: DIM SS$(3)*24
30 S$(2) = "ポケコンモ"
40 S$(1) = "マダマダゲンエキ"
50 S$(0) = "ベ!シック"
60 LPRINT "I——-I"
70 FOR I=1 TO 24
80 FOR J=0 TO 2
90 SS$(J) = MID$(S$(J), I, 1)
100 IF SS$(J)="" THEN LET SS$(J)=" "
110 NEXT J
120 IF SS$(0)=" " AND SS$(1)=" " AND SS$(2)=" " THEN GOTO 150
130 LPRINT "I " +SS$(0)+" "+SS$(1)+" "+SS$(2)+ " I"
140 NEXT I
150 LPRINT "I——-I

機械がが古すぎて印字がうまくできなかったみたいだけど、LPRINT 命令で、紙に出力するのがポイントだね。

ピックアップ No.8 (jQuery)

JavaScript(jQuery)の作品。

ちょっと AA みたいな縦書きの方法だね。俳句を入力して実行するんだけど、goo 形態素解析 API を使って、一部の単語をが置き替えちゃって新しい俳句を作るのが新しい!

ピックアップ No.9 (Ruby)

Ruby の作品。


#! /usr/local/bin/ruby21
require 'csv'
F, S = [], []
open("naist-jdic.csv", "r:EUC-JP:UTF-8"){|file|
file.each_line {|buf|
a = buf.split(",")
next if a[13] != ""
if a[11].length == 5 then F << a[0]
elsif a[11].length == 7 then S << a[0]
end
}
}
loop {
print "%s %s %s\n" % [F.sample, S.sample, F.sample]
sleep 1
}

view raw

haiku.rb

hosted with ❤ by GitHub

辞書データ「NAIST Japanese Dictionary」を読み込んで、5 7 5 の単語からいろいろな俳句を出力する、俳句生成系のパターン! もう少し俳句っぽくなるデータの辞書だとよさそう。

ピックアップ No.10 (Ruby)

次も Ruby の作品。


sounds=%w(c o u g h)
cough = sounds.shuffle
count = 0
while (sounds != cough)
cough.shuffle!
print sounds != cough ? "(⊙ ω ⊙)" : " (´・ω・`)ゴホン "
count += 1
(1..count).each{|c| print c != count ? "(⊙ ω ⊙)" : "(⊙ ω ⊙)\n" } if sounds == cough
end
p "咳をしても一人"
p (count*2).to_s + "人の中で一人です"

view raw

haiku.rb

hosted with ❤ by GitHub

自由律俳句「咳をしても一人」を表現した意欲作! たくさんの顔文字の中で、ひとりだけ咳をしている顔文字が出力されるよ。

以上、Vol.2 へ続く!

応募方法は、「プロ生ちゃん #俳句プログラミング プチコンテスト 2015」を確認してね。ハッシュタグと「@pronama」を含めてツイートだよ!

The following two tabs change content below.
都内の公立高校に通う高校生。部活は、情報処理研究会。身体を動かすのも好きで、気が向いたときはなぜか体育会系の部活に混ぜてもらっていろんなスポーツをすることも。プログラミング生放送のキャラクターとして活動中!