「#俳句プログラミング プチコンテスト 2015」ピックアップ Vol. 2
慧: こんにちは! 「俳句プログラミング プチコンテスト」の応募されたコードをピックアップして紹介していくよ。今回はその2回目。毎回言うけど、別に良い悪いって話じゃないからね! たくさん応募があるから、他の人のコードを別言語に移植や、バグがあったらつっこむのもアリだよ!
みんなのツイート
みんなのコードを見るには、Togetter まとめ から。たくさん応募待ってるよ~。
ピックアップ No.11 (bash)
今回のひとつ目は、bash だよ。
@pronama でけたhttps://t.co/F8Wb6l9AYe#俳句プログラミング
— 酷道スキー (@route472) February 27, 2015
@pronama 実行するとこんな感じ#俳句プログラミング pic.twitter.com/yBIaQX9xST
— 酷道スキー (@route472) February 27, 2015
#/bin/bash
WORDS=($(curl "http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8" 2> /dev/null | grep -o '[一-龠][一-龠]'))
WORD=$(echo ${WORDS[$(expr $RANDOM % ${#WORDS[@]})]})
echo "${WORD}や ああ${WORD}や ${WORD}や"
echo " ウィキペディア(http://ja.wikipedia.org/wiki/)より"
exit 0
Wikipedia から単語を取得して、○○や ああ○○や ○○や って感じの俳句を作ってくれるよ。新しいページの抜粋などが載ってる Wikipedia のメインページを参照してるから、いろいろな俳句が作れるね!
ピックアップ No.12 (SmileBASIC)
次は、プチコン SmileBASIC。上と同じ ○○や ああ○○や ○○や パターン!
.@pronama #俳句プログラミング #petitcom #smilebasic
INPUT A$
IF LEN(A$)!=4 THEN B$="エラーです" ELSE B$=A$+"や"
P B$:END
DEF P S
? S:? "ああ、";S:? S
END— Gust Notch? (@gust_notch) February 27, 2015
ツイートできる長さだね。
ピックアップ No.13 (6502用アセンブリ言語)
次は、アセンブリ言語!? ソースコードで俳句部門だよ。
ソースコード部門に6502用アセンブリ言語でこういうのはあり? 誰か(x)がうろうろする様を表現。季語がないと良くないかな。inx三連の所が好き: https://t.co/xwtzQcA3nn #俳句プログラミング @pronama pic.twitter.com/wAAPeVjox9
— 門真 なむ (@num_kadoma) February 27, 2015
5 7 5 バイトで構成されたプログラム!
ピックアップ No.14 (Perl)
続いて、Perl だよ。
@pronama 俳句縦書き表示プログラムをPerlに【再帰を使って】移植してみました。 https://t.co/JEI6z8Acx3 #俳句プログラミング pic.twitter.com/e1AO9LPQ1Q
— 長門みらい / Hayate Mitaka (@MiraiNagato) February 28, 2015
use strict;
use warnings;
use utf8;
binmode(STDOUT, ":utf8");
my($i,$j,$word);
my(@s) = reverse(split(/,/,"古池や,蛙飛びこむ,水の音"));
print process(0,@s);
sub process {
my($index) = shift; my($w,$v) = ""; my($k) = 0; my($result) = ""; my(@vert);
foreach $w (@_) { if ($k < length($w)) { $k = length($w); } } if ($index > $k) { return ""; }
foreach $w (@_) {
$k=0; $v=""; @vert = (split(//,$w));
if (scalar(@vert) > $index) { $result .= $vert[$index]; } else { $result .= " "; }
}
return $result . "\n" . &process($index+1,@_)
}
縦書き変換だけど、再帰を使って実現するっていう制約付き。process サブルーチンから process を呼んでるね。他の言語へ移植や、いろいろ制約を付けた応募もアリだよ。
ピックアップ No.15 (C)
次は、C 言語。
#俳句プログラミング @pronama
思い付きで応募!ソースコードで俳句部門かなhttp://t.co/QMyJHkLmN4— おーぼん@甘味小麦🍰 (@y_oubon) February 28, 2015
#include<stdio.h>
int main(void) {
int tsuwamono = 1000,natsukusa = 0;
for( ; tsuwamono > 1 ; tsuwamono--,natsukusa++);
printf("All that remains, Of warriors' dreams\n");
}
俳句をソースコードで表現するパターン! 「夏草や 兵どもが 夢の跡を」表したんだって。
ピックアップ No.16 (JavaScript)
次は、JavaScript。
JavaScriptでもうひとつ作りました。俳句は画像の中に隠れています!https://t.co/N0WxAoIF91@pronama #俳句プログラミング pic.twitter.com/EEWd7esdwN
— たけまる (@felis_catus_) February 28, 2015
画像の左上の RGB の値を UTF-8 の値として変換して俳句の文字を埋め込んでいるんだって!
ピックアップ No.17 (C++)
次は、C++。
C++11とstd::complexを使った #俳句プログラミング ちょっと修正しました。@pronama
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ http://t.co/4dk1EzARdj— dc1394 (@dc1394) March 1, 2015
#include <complex>
#include <iostream>
#include <locale>
int main()
{
auto const haiku = L"島々に 灯をともしけり春の海 正岡子規";
std::complex<int> c(3, 0), cp(c);
std::complex<int> const r(-1, 0), i(0, 1);
std::ios_base::sync_with_stdio(false);
std::locale::global(std::locale(""));
std::wcout.imbue(std::locale(""));
for (auto a = 0; a < 21; a++, c += r) {
if (!c.real()) {
std::wcout << haiku[7 * c.real() + c.imag()] << std::endl;
cp += i;
c = cp;
}
std::wcout << haiku[7 * c.real() + c.imag()];
}
}
複素数が扱える complex ライブラリを使って、何行目の何文字目かを、実部と虚部で表して、縦書き変換してる変わったコードになってるよ。
ピックアップ No.18 (C#)
次は C#。俳句を出力するけど、コード中にも俳句があるっていうパターン!
https://twitter.com/kamiya_owl/status/572045254775316480
Quine プログラミングといって、ソースコードと同じ文字列を出力できるようになってるの。すごい!
ピックアップ No.19 (Tera Term マクロ)
Tera Term マクロの作品。
#俳句プログラミング @pronama Tera Termマクロで。Tera Term 4.86以降で動きます (このマクロを書いていてバグを見つけたorz)。適当なホストに繋いでる状態で実行して下さい。 https://t.co/dd1MJL7txY
— いわもと こういち (@ttdoda) March 2, 2015
#俳句プログラミング @pronama 実行画面。端末側の機能で2桁目に右マージンを設定する事で1文字表示毎に改行を行うようにしています。 pic.twitter.com/IQkny7owpX
— いわもと こういち (@ttdoda) March 2, 2015
コンソール画面で、縦書きで、複数の俳句を表示するってのは新しいかも。マクロで、画面全体を右にずらすことができるみたい。
ピックアップ No.20 (Java)
今回の最後は Java だよ。
https://twitter.com/_yuiki/status/572388790360150016
ソースコードにアクセスしてみてね。俳句を縦書き表示するソースコードだけど、Java だけどセミコロンを使わずにコードを書くっていう、謎制約が入ったコードだよ。
というわけで、以上! Vol.3 へ続くよ。
応募方法は、「プロ生ちゃん #俳句プログラミング プチコンテスト 2015」を確認してね。ハッシュタグと「@pronama」を含めてツイートだよ!



