「#俳句プログラミング プチコンテスト 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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#/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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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」を含めてツイートだよ!
最新記事 by kei (全て見る)
- HSP プログラムコンテスト2024 結果発表&プロ生ちゃん賞発表! #hsp3 - 2024/12/13
- プロ生ちゃんチョコプログラミングコンテスト2024開催! - 2024/02/13
- HSP プログラムコンテスト2023 結果発表&プロ生ちゃん賞発表! #hsp3 - 2023/12/04