#include\
<unistd.h>
float(e),
g,h,J[]={0 ,1,2};
#include/* -*/<stdio.h>
char(T)[ 1999]="\x1b[H" "\x1b[2J"
;int(i);float/* */_Complex
*I=(void*)J,v,f,b [9999],*p
=b,*q;int main(){for(;p+=(i/* / */=getchar (),/*,
*/i>32?*p= f,p[2]=i,3:0)/* / */;f=i<11? i=f+2:f/*.>>
*/+*I)if( i<0){/*; | o */for(i= 0,puts(T),/**'
*/usleep(+ 5000/* \ */);i++<1919;)T
[i+2]=i%80 ?32:10;/*.>> \ */for(q=b;q<p;f=*
I*79,v=* q+(q[1]/=4)/*^ *//4+f+48 ,i=v/f,v-=f*i,i=v/+
48,i=*q=v-i*48, T[i=3+i/2* 80-*I*v]=q[2],q
+=3)for(f=q[1],i= b-p;i<9;i >=0?p[i]
=0,q[1]+=v?v/g:f:+g &&g<8?*p-= g<4/*,
*/?v/e:0,p[3]+= p[i+1],p[6 ]+=p[i]/*.>>
*/-*q:0, i+=3)for (h=v=p[i]-(/*`
*/i<0)**q,g=e=v
*h*2-v*v;e&&g-h;g
=(h+e/h)/2)h=g;}}/*
fly-swim-swarm-
-IOCCC*/鳥が 4 羽、魚が 1 匹の絵です。なんか適当にテキストファイルを食わせて実行すると、文字が群れを成してうごめきます。
$ gcc -o prog prog.c $ ./prog < prog.c
Boids のシミュレータです。各文字が鳥だか魚だかっぽい人工生命(大げさ)になって、以下の規則にしたがってうごめきます。
- なるべく近隣の文字に近づきすぎない(衝突回避)
- なるべく近隣の文字から離れすぎない(迷子防止)
- なるべく近隣の文字と同じ方向に進む(同調圧力)
主体性のない生命ですね……。でもそれぞれがこの規則に従うだけで、全体が群れを成して動くんだから面白い。
戦略と狙い
Boids は以前から IOCCC 向けに一回やっておきたかったネタなのですが、テキスト流体シミュレーションの二番煎じにとどまった格好です。_Complex を使っているところも同じ。実質 600 バイト程度で、まずまずコンパクトに書けたなーと思ってますが、インパクトは流体シミュ以下ですかね。
鳥と魚の絵なのはエッシャーの「空と水」のリスペクトです(@hirekoke さんのアイデア)。この形はめっちゃ気に入っているのですが、内容がついていかなかったので申し訳ない。