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

Development,Eventbash,C#,Java,JavaScript,Perl,Petitcom,俳句プログラミング

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

みんなのツイート

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

ピックアップ No.11 (bash)

今回のひとつ目は、bash だよ。


#/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。上と同じ ○○や ああ○○や ○○や パターン!

ツイートできる長さだね。

ピックアップ No.13 (6502用アセンブリ言語)

次は、アセンブリ言語!? ソースコードで俳句部門だよ。

5 7 5 バイトで構成されたプログラム!

ピックアップ No.14 (Perl)

続いて、Perl だよ。


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,@_)
}

view raw

haiku_perl.pl

hosted with ❤ by GitHub

縦書き変換だけど、再帰を使って実現するっていう制約付き。process サブルーチンから process を呼んでるね。他の言語へ移植や、いろいろ制約を付けた応募もアリだよ。

ピックアップ No.15 (C)

次は、C 言語。


#include<stdio.h>
int main(void) {
int tsuwamono = 1000,natsukusa = 0;
for( ; tsuwamono > 1 ; tsuwamono–,natsukusa++);
printf("All that remains, Of warriors' dreams\n");
}

view raw

haiku.c

hosted with ❤ by GitHub

俳句をソースコードで表現するパターン! 「夏草や 兵どもが 夢の跡を」表したんだって。

ピックアップ No.16 (JavaScript)

次は、JavaScript。

画像の左上の RGB の値を UTF-8 の値として変換して俳句の文字を埋め込んでいるんだって!

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

次は、C++。


#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()];
}
}

view raw

haiku.cpp

hosted with ❤ by GitHub

複素数が扱える complex ライブラリを使って、何行目の何文字目かを、実部と虚部で表して、縦書き変換してる変わったコードになってるよ。

ピックアップ No.18 (C#)

次は C#。俳句を出力するけど、コード中にも俳句があるっていうパターン!

https://twitter.com/kamiya_owl/status/572045254775316480

Quine プログラミングといって、ソースコードと同じ文字列を出力できるようになってるの。すごい!

ピックアップ No.19 (Tera Term マクロ)

Tera Term マクロの作品。

コンソール画面で、縦書きで、複数の俳句を表示するってのは新しいかも。マクロで、画面全体を右にずらすことができるみたい。

ピックアップ No.20 (Java)

今回の最後は Java だよ。

https://twitter.com/_yuiki/status/572388790360150016

ソースコードにアクセスしてみてね。俳句を縦書き表示するソースコードだけど、Java だけどセミコロンを使わずにコードを書くっていう、謎制約が入ったコードだよ。

というわけで、以上! Vol.3 へ続くよ。

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

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