「#俳句プログラミング プチコンテスト 2015」ピックアップ Vol. 1
慧: こんにちは! 「俳句プログラミング プチコンテスト」の応募されたコードをピックアップして紹介していくよ。毎回言うけど、別に良い悪いって話じゃないからね! たくさん応募があるから、他の人のコードを参考にアップデートしてもいいし、バグがあったらつっこむのもアリだよ!
みんなのツイート
みんなのコードを見るには、Togetter まとめ から。たくさん応募待ってるよ~。
ピックアップ No.1 (なでしこ)
ひとつ目は、最初の応募作品。「ソースコードで俳句」部門だね。
#俳句プログラミング @pronama
【ソースコードで俳句部門】手始めに簡単なプログラムをば.https://t.co/hemz7itLdK— 3846masa (@3846masa) February 26, 2015
# @3846masa
尋ねたら
それを2で割り
言ってやる
なでしこだと、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
俳句自体は、コマンドライン引数に 5 7 5 に区切って入力っていう方法だね。
ピックアップ No.3 (C++)
続いて、C++。これは、俳句を出力しているし、コード中に俳句も書かれているパターンだよ。
@pronama さすがにやっつけすぎるかと思ったのでつけなかったのですけど、枯れ木も山の賑わいということで http://t.co/7AhE6YUg2c #俳句プログラミング
— みすと / 明衣(あかは) (@mist_akaha) February 26, 2015
#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
ピックアップ 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
<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>
単純に俳句を表示する部類に入ると思うけど、Vue.js というデータバインディングライブラリを使った作品。後発のライブラリで、軽量・高速が特徴みたいだよ。
ピックアップ No.5 (RFO BASIC)
@pronama タグ忘れた→作りました!でも、なぜかシュールに…汗 言語はBASIC!(RFO BASIC) 3句地味に表示するだけです。 #俳句プログラミング
ソース:http://t.co/jojTxgeeWo 動画:http://t.co/vhqjZwtV8Z— basictomonokai (@basictomonokai) February 26, 2015
次は、BASIC! で、Android 環境だよ。RFO BASIC! for Android という環境を利用しているみたい。
私の画像データも活用してくれている作品で、オリジナルの俳句を表示しているよ。
コードは、長すぎるので省略! 画像データも base64 形式でコードに埋め込まれているから、すごいことに……。
ピックアップ No.6 (SmileBASIC)
次は、プチコンの SmileBASIC。
色々とミスがあったんで修正しました。一画面です。 #俳句プログラミング #petitcom @pronama pic.twitter.com/1PJtUb72SL
— otta@べ~しっ君💻 (@otta777) February 26, 2015
@pronama #俳句プログラミング 画面はこんな感じです。平仮名だと5・7・5文字とは限らないのでプログラムにはちょっと細工が要ります。今どうするか思案しています。(^^;; pic.twitter.com/2FiG6toAQz
— otta@べ~しっ君💻 (@otta777) February 27, 2015
縦書き変換のプログラムに加えて、27行目の TALK 命令で、音声出力もあるのがポイントかな。プチコンならではの手軽さだね。
ピックアップ No.7 (BASIC)
次は、ポケコン SHARP PC-1260 で BASIC!
I—–I
Iヘ マ ホI
I゙ タ ゚I
I! ゙ ケI
Iシ マ コI
Iッ タ ンI
Iク ゙ モI
I ケ I
I ゙ I
I ン I
I エ I
I キ I#俳句プログラミング@pronama pic.twitter.com/8PK0iUNxyL— まぼろしのおに@復帰準備中 (@Mavoroshi_Oni) February 26, 2015
使用言語:BASIC
使用機材:SHARP PC1260+CE-125S
■ソースhttps://t.co/dDDPsU26MQ
■動画(まだ処理中)https://t.co/LsAH8QOPjU#俳句プログラミング@pronama— まぼろしのおに@復帰準備中 (@Mavoroshi_Oni) February 26, 2015
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)の作品。
jQuery (JavaScript) で作ってみました。無理やり縦書きです。いろいろな俳句を入れてみて下さい。一部を勝手に書き換えます!https://t.co/6ppCXXvNQK@pronama #俳句プログラミング pic.twitter.com/LDj2SkaGHr
— たけまる (@felis_catus_) February 26, 2015
ちょっと AA みたいな縦書きの方法だね。俳句を入力して実行するんだけど、goo 形態素解析 API を使って、一部の単語をが置き替えちゃって新しい俳句を作るのが新しい!
ピックアップ No.9 (Ruby)
Ruby の作品。
@pronama ランダムな俳句を生成しますが辞書ファイルが別に必要です… #俳句プログラミング https://t.co/kYsuqmust4 pic.twitter.com/ivLyCBwkYz
— きしもと (@ksmakoto) February 27, 2015
#! /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
}
辞書データ「NAIST Japanese Dictionary」を読み込んで、5 7 5 の単語からいろいろな俳句を出力する、俳句生成系のパターン! もう少し俳句っぽくなるデータの辞書だとよさそう。
ピックアップ No.10 (Ruby)
次も Ruby の作品。
@pronama https://t.co/9sfyvMdFjJ
尾崎放哉の「咳をしても一人」を表現しました。
他人がいればいるほど、一人って強調されるよな〜と思って。
配列[cough]をシャッフルして、この順番になったときに咳をするようにしています。#俳句プログラミング— はっとりぬ (@moroku0519) February 27, 2015
@pronama 実行結果はこんな感じです。 pic.twitter.com/aiqX219A8O
— はっとりぬ (@moroku0519) February 27, 2015
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 + "人の中で一人です"
自由律俳句「咳をしても一人」を表現した意欲作! たくさんの顔文字の中で、ひとりだけ咳をしている顔文字が出力されるよ。
以上、Vol.2 へ続く!
応募方法は、「プロ生ちゃん #俳句プログラミング プチコンテスト 2015」を確認してね。ハッシュタグと「@pronama」を含めてツイートだよ!



