diff --git a/2005/aidan.md b/2005/aidan.md new file mode 100644 index 0000000..198dd07 --- /dev/null +++ b/2005/aidan.md @@ -0,0 +1,100 @@ +--- +id: 2005/aidan +year: 2005 +order: 1 +authors: "Aidan_Thornton" +orig_url: "https://www.ioccc.org/2005/aidan/aidan.c" +hint_url: "https://www.ioccc.org/2005/aidan/hint.text" +title: "IOCCC 2005: Most ingenious puzzle solution" +award_ja: "もっとも巧妙なパズルの解" +--- + +## 動作 + +数独のソルバおよび問題作成器。 + +無引数で呼び出して問題を標準入力に与えるとソルバになる。 + +``` +$ gcc -o aidan aidan.c + +$ ./aidan < insane1.sudoku +. . 4 | . . . | . 5 6 +5 . . | . 7 2 | . . . +. . 1 | . . . | 8 . . +------+-------+------ +. . . | . . . | . . . +. . . | 6 9 3 | . . 5 +. . . | . . . | 7 3 4 +------+-------+------ +. 5 . | 2 . 1 | 4 . 8 +3 . . | . . . | . . . +. . . | . . . | . 6 1 + + +7 3 4 | 8 1 9 | 2 5 6 +5 8 6 | 4 7 2 | 9 1 3 +2 9 1 | 3 5 6 | 8 4 7 +------+-------+------ +1 2 3 | 5 4 7 | 6 8 9 +8 4 7 | 6 9 3 | 1 2 5 +9 6 5 | 1 2 8 | 7 3 4 +------+-------+------ +6 5 9 | 2 3 1 | 4 7 8 +3 1 8 | 7 6 4 | 5 9 2 +4 7 2 | 9 8 5 | 3 6 1 + +Done (stk 0 3) +``` + +シード付きで起動すると問題を作成する。 + +``` +$ ./aidan 1 +. . . | . . . | . . . +. . . | . . . | . . . +. . . | . . . | . . . +------+-------+------ +. . . | . . . | . . . +. . . | . . . | . . . +. . . | . . . | . . . +------+-------+------ +. . . | . . . | . . . +. . . | . . . | . . . +. . . | . . . | . . . + + +2 1 3 | 7 8 9 | 4 5 6 +6 4 7 | 5 1 2 | 8 3 9 +8 5 9 | 3 4 6 | 7 2 1 +------+-------+------ +7 8 1 | 4 6 3 | 2 9 5 +3 6 2 | 9 5 8 | 1 4 7 +4 9 5 | 1 2 7 | 3 6 8 +------+-------+------ +9 2 4 | 6 7 1 | 5 8 3 +5 7 6 | 8 3 4 | 9 1 2 +1 3 8 | 2 9 5 | 6 7 4 + +Done (stk 44 44) + + +2 . . | 7 8 . | . . . +6 . . | . . 2 | . 3 9 +8 . . | . . . | . . 1 +------+-------+------ +7 . 1 | . . 3 | . 9 5 +. . . | . . . | . 4 . +. . 5 | . . . | . . 8 +------+-------+------ +. . 4 | . . . | . . . +. . . | . . 4 | 9 . 2 +1 . . | 2 . . | 6 . . + +Done (stk 82 6) +``` + +## 解説 + +変な変数名や、`goto`によるわかりにくいフローなど。 +アルゴリズムはブルートフォースではないらしい。詳細未解析。 diff --git a/2005/anon.md b/2005/anon.md new file mode 100644 index 0000000..8b68f98 --- /dev/null +++ b/2005/anon.md @@ -0,0 +1,77 @@ +--- +id: 2005/anon +year: 2005 +order: 2 +authors: "Anonymous_2005" +orig_url: "https://www.ioccc.org/2005/anon/anon.c" +hint_url: "https://www.ioccc.org/2005/anon/hint.text" +title: "IOCCC 2005: Best 3D puzzle" +award_ja: "最高の3Dパズル" +--- + +## 動作 + +15パズルの任意サイズ化+3D対応。 + +次のように起動すると普通の15パズルになる。 + +``` +$ gcc -o anon anon.c + +$ ./anon 4 4 +``` + +``` + 15 7 13 2 + 10 3 1 5 + ## 8 11 6 + 14 9 4 12 +``` + +`##`が空きマス。jlで空きマスを左右に動かし、ikで上下に動かす。 + +次のように起動すると3次元化する。 + +``` +$ ./anon 3 3 3 +``` + +``` + 7 11 1 + 12 9 22 + 25 23 4 + + 18 17 8 + 6 14 26 + 2 20 13 + + 10 24 21 + 15 19 5 + ## 16 3 +``` + +操作方法は2D版に加え、oで奥方向に動かし、nで手前方向に動かす。 + +## 解説 + +難読化の一番のポイントとされているのは、変数宣言も`malloc`もせずに動いていること。 +`argc`と`argv`だけでどうにかしているわけでもない。 +どうしているかというと、`main`を再帰させることでスタックを伸ばし、その連続領域をメモリとして使っている。 +スタックが伸びる方向は環境によって違いがあるが、検出して適切に扱っているとのこと。 + +確保された領域は、フレームポインタやリターンアドレスも遠慮なく書き潰されるので、スタックは破壊される。 +そのため`main`関数は正常に`return`はできないので、終了するときは`exit()`を使っている。 + +生成されるパズルは解けないこともある。 +初期版はパリティチェックしていたが、IOCCCのサイズ制限のために除去したとのこと。 + +ゲーム中毒防止のため(?)、また、解けないパズルに無限の時間を使ってしまわないようにするため、長く操作をしているとそのうち異常終了するとのこと。 +操作のたびに`main`を再帰することにより、そのうちスタックオーバーフローするという仕様になっている。 + +ia64でポインタを格納するために`int`ではなく`long`にした、という記述があり、近代になってきた感がある。 + +マクロを使った難読化もいろいろ行われている。 +多くのマクロはサブルーチン的に使われているので、単純にプリプロセスで展開してもわかりやすくならない。 +`main`関数が1つの巨大な`return`文になっているので、indentコマンドをかけるのもほとんど無力。 +hint.textに各マクロやデータ構造の詳細な解説があるので、興味があれば参照するとよい。 + diff --git a/2005/boutines.md b/2005/boutines.md new file mode 100644 index 0000000..843a91a --- /dev/null +++ b/2005/boutines.md @@ -0,0 +1,33 @@ +--- +id: 2005/boutines +year: 2005 +order: 3 +authors: "Francois_Boutines" +orig_url: "https://www.ioccc.org/2005/boutines/boutines.c" +hint_url: "https://www.ioccc.org/2005/boutines/hint.text" +title: "IOCCC 2005: Most superfluous output" +award_ja: "もっとも過剰な出力" +--- + +## 動作 + +2次元の点の集合を入力し、[ボロノイ図](https://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%AD%E3%83%8E%E3%82%A4%E5%9B%B3)をSVGで描く。 + +{: .wrap } +``` +$ gcc -o boutines boutines.c + +$ ruby -e '20.times{puts "#{rand} #{rand}"}' | ./boutines > test.svg + +$ convert test.svg test.png +``` + +{% include img.html src="2005-boutines.png" desc="ランダムに配置した点に対してボロノイ図を計算した様子" %} + +## 解説 + +審査員が「『生成されたSVGファイルは名前に反してスケーラブルでない』の意味を説明できますか?」という問いを残している。 +SVGはScalable Vector Graphicsの略なのに、巨大なSVGファイルを作るとビューアが重くなってつらい(スケーラブルでない)という意味だと思われる。 +もちろん、SVGのScalableは拡大縮小できるという意味。 + +賞名の意味はわからなかった。 diff --git a/2005/chia.md b/2005/chia.md new file mode 100644 index 0000000..bc0cd18 --- /dev/null +++ b/2005/chia.md @@ -0,0 +1,55 @@ +--- +id: 2005/chia +year: 2005 +order: 4 +authors: "V._Chia" +orig_url: "https://www.ioccc.org/2005/chia/chia.c" +hint_url: "https://www.ioccc.org/2005/chia/hint.text" +title: "IOCCC 2005: Most ambiguous language" +award_ja: "もっとも曖昧な言語" +--- + +## 動作 + +端末に[コッホ曲線](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%83%E3%83%9B%E6%9B%B2%E7%B7%9A)を描く。 + +``` +$ gcc -o chia chia.c + +$ ./chia +``` + +``` + ..::.. + ..:.:: ::.:. + :` `` `` :: + ::. .:` + ::`:. ::` `:. ::`:. + .:..: `:.:..: `:.:..: `:.:.. + ````` `````` `````` ````:: + `: .::` + .:: ::. + ::.... ....:: + `:``: .:`:`` + `:. ::` + ::` `:. + ..::.: `:.::.. + :: :: + ``: .:`` + .:: ::. + ::.... ...... ...... ....:: + ````: `:````: `:````: `:```` + `:::` `:. ::` `:::` + :`` ``: + :.... ....:: + ```:: ::``` + ``::`` +``` + +## 解説 + +Javaのような見た目のコード。 +素直に読むと、ファイルを読んで各行の長さを出力するように見えるが、実際にはまったく異なる挙動をする。 +コメントにもhint.textにもJavaへの怨嗟で溢れていて面白い。 + +プリプロセスしてindentすれば比較的普通に読める。 diff --git a/2005/giljade.md b/2005/giljade.md new file mode 100644 index 0000000..aa1a73c --- /dev/null +++ b/2005/giljade.md @@ -0,0 +1,311 @@ +--- +id: 2005/giljade +year: 2005 +order: 5 +authors: "Gil_Dogon" +orig_url: "https://www.ioccc.org/2005/giljade/giljade.c" +hint_url: "https://www.ioccc.org/2005/giljade/hint.text" +title: "IOCCC 2005: Best 2D puzzle" +award_ja: "最高の2Dパズル" +--- + +## 動作 + +[箱入り娘](https://ja.wikipedia.org/wiki/%E7%AE%B1%E5%85%A5%E3%82%8A%E5%A8%98_%28%E3%83%91%E3%82%BA%E3%83%AB%29)のバリアントのソルバ。 + +``` +$ gcc -m32 -o giljade giljade.c + +$ ./giljade > out +``` + +出力は75行ごとに、プログラムを整形したものとして表示する。最初の75行は初期盤面。 + +``` +$ head -75 out + + + + + + + #define/**/F/***/for/*A*//*ddfhnd*/ + #define/***/H()f=*E<<4|*E,f=~(f|/*\ + */f<<1|E[3]|E[1]|E[1]<<4|E[2]|E[(2\ + )]<<(1));/**.F.***.fnr.*@*."ddfhn*/ + #define/***/I(x,d)F(;s;C()){s=s^(b\ + =s&s-1^s);F(N[4]=q=0;q<4;q++)N[q]=\ + E[q];N[5]=E-B;N[d]^=+b^(b)x;}/****/ + #define/**/o(p,t,i,m,a,l)u=(f&p)i(\ + m);s=u&E[3];I(t(m),3)s=(u)a&E[l];I\ + (t(m),l)u=u>>5-m&u;s=u&E[3-l];I(t(\ + m),3-l)s=(u)a&*E;I(t(m),(0))/*H((*/ + ;;char*A="#define/**/F/***/for/*A*" + "/#define/***/H()f=*E<<4|*E,f=~(f|" + +"f<<1|E[3]|E[1]|E [1]<<4|E[2]|E[(2)]<<(1));#define/** */I(x,d)F(;s;C()" +"){s=s^(b=s&s-1^s );F(N[4]=q=0;q<4;q++)N[q]=E[q];N[5] =E-B;N[d]^=+b^(b" +")x;}#define/**/o (p,t,i,m,a,l)u=(f&p)i(m);s=u&E[3];I (t(m),3)s=(u)a&E" +"[l];I(t(m),l)u=u >>5-m&u;s=u&E[3-l];I(t(m),3-l)s=(u) a&*E;I(t(m),(0))" +"#;/*echo/Line/%d ;sed/-n/-e/%d,%dp/%s>*//*c.c;cc/c.c /-c*/#;char*A=,*" +"_,*R,*Q,D[9999], *r,l[9999],T=42,M,V=32;long*E,k[999 9],B[1<<+21],*N=" +"B+1234567,q=0,h= 3,j=2,O,b,f,u,s,c,a,t,e,d;C(){F(h=N [3];(B[h]&&+memc" +"mp(N,B+B[h],L4)) ;h=B[h]+4);B[h]||(B[h]=N-B,N=N+6);} main(char*U,int*" +"w[]){;;F(_=A;*_; _++)10-*_&&*_-V&&(*_-92)&&(k[q]=isa lnum(l[q]=*_),q+" +"+);M=47;*(E=N-6) =64;E[1]=289;E[2]=270336;F(E[3]=327 82;E> ,4,>>4,1)o(+489335,>>,<<,1,,2)o(978 670,<<,>>,1,>>1," +"2)o(+65535,>>,<< ,4,,1)if(8192&*E){F(N=B;E>B;E=B+E[5 ])*N++=E-B;F(;N>" +"B;){h=*(E=B+*--N );H()s=~(E[1]|h|h<<1);u=~(E[2]|h|h< <4);r=l;_=D;d=1;" +"a=2;O=8;F(q=74;" +"q;q--){F(b=0;b<7 2;b++){h=+1<<(q-1 )/14*4+(b-1)/18;j=b?(!(b%18)&&u&h)" +"|h&f|(!(q%14)&&s &h)?1:0:2;if(O<3) O?j?j-1&&(O-2&&d--,*R=34,O=2):(*_+" +"+=O-2?l[d]?l[d++ ]:(d=t,O=e=3,34): (O=1,34)):j||(*_++=dj&&(sprintf(l,r+" +"1,j,j,O=j+75,w[1 ]),j=O,!system(l) ););exit(j<+13499);}t=d+9;_[-1]=l[" +"++d];}a-1|+j-2|| (R-Q<3?(*(Q++R;);}}} ;O-b-f-u-s-c-a-t-e;}",*_,*R,*Q,D[/* +*/9999],*r,l[9999 ],T=42,M,V=32;/*n */long*E,k[9999],B[1<<+21],*N=B+/*3 +*/1234567,q=0,h=3 ,j=2,O,b,f,u,s,c, a,t,e,d;C(){F(h=N[3];(B[h]&&+memcmp +(N,B+B[h],L4));h= B[h]+4);B[h]||(B[ h]=N-B,N=N+6);}main(char*U,int*w[]) +{;;F(_=A;*_;_++/* */)10-*_&&*_-V&&( *_-92)&&(k[q]=isalnum(l[q]=*_),q++) +;M=47;*(E=N-6)=64 ;E[1]=289;E[2]=/* */270336;F(E[3]=32782;E>, 4,>>4,1)o(+489335 ,>>,<<,1,,2)o(978670,<<,>>,1,>>1,2) +o(+65535,>>,<<,/* */4,,1)if(8192&*E ){F(N=B;E>B;E=B+E[5])*N++=E-B;F(;N> +B;){h=*(E=B+*--N) ;H()s=~(E[1]|h|/* */h<<1);u=~(E[2]|h|h<<4);r=l;_=D;d= +1;a=2;O=8;F(q=74; q;q--){F(b=0;b<72 ;b++){h=+1<<(q-1)/14*4+(b-1)/18;j=b +?(!(b%18)&&u&h)|h &f|(!(q%14)&&s&h) ?1:0:2;if(O<3)O?j?j-1&&(O-2&&d--,*R +=34,O=2):(*_++=O- 2?l[d]?l[d++]:(d= t,O=e=3,34):(O=1,34)):j||(*_++=dj&&(/*rin +*/sprintf(l,r+1,j ,j,O=j+75,w[1]),j =O,!system(l));); exit(j<+13499);}t +=d+9;_[-1]=l[++d] ;}a-1|+j-2||(R-Q< 3?(*(Q++R;);}}};O-b-f- u-s-c-a-t-e;}/*.* dbhn.Lhnd.$d:rdd. +,n.,d.$d,$dp.$r>* ..*b.b:bb.b.b.,b* .":bh`r*@<,*^,*R, *P,DZ8888\,*r,lZ8 +888\,T<42,L,V<22: lnnf*D,jZ8888\,BZ 0<<*20\,*N>5-m&u;s=u&E[3-l];I(t(\ +m),3-l)s=(u)a&*E; I(t(m),(0))/*<<0|DZ2\|DZ0\|DZ0\<<*/ +;;char*A="#define /**/F/***/for/*A*/#define/***/H()f" +"=*E<<4|*E,f=~(f| f<<1|E[3]|E[1]|E[1]<<4|E[2]|E[(2)]" +"<<(1));#define/* **/I(x,d)F(;s;C()){s=s^(b=s&s-1^s)" +";F(N[4]=q=0;q<4; q++)N[q]=E[q];N[5]=E-B;N[d]^=+b^(b" +")x;}#define/**/o (p,t,i,m,a,l)u=(f&p)i(m);s=u&E[3];" +"I(t(m),3)s=(u)a" +"&E[l];I(t(m),l)u =u>>5-m&u;s=u&E[3-l];I(t(m),3-l)s=( u)a&*E;I(t(m),(0" +"))#;/*echo/Line/ %d;sed/-n/-e/%d,%dp/%s>*//*c.c;cc/c .c/-c*/#;char*A=" +",*_,*R,*Q,D[9999 ],*r,l[9999],T=42,M,V=32;long*E,k[9 999],B[1<<+21],*" +"N=B+1234567,q=0, h=3,j=2,O,b,f,u,s,c,a,t,e,d;C(){F(h =N[3];(B[h]&&+me" +"mcmp(N,B+B[h],L4 ));h=B[h]+4);B[h]||(B[h]=N-B,N=N+6) ;}main(char*U,in" +"t*w[]){;;F(_=A;* _;_++)10-*_&&*_-V&&(*_-92)&&(k[q]=i salnum(l[q]=*_)," +"q++);M=47;*(E=N- 6)=64;E[1]=289;E[2]=270336;F(E[3]=3 2782;E>,4,>>4,1)o(+489335,>>,<<,1,,2)o(9 78670,<<,>>,1,>>" +"1,2)o(+65535,>>, <<,4,,1)if(8192&*E){F(N=B;E>B;E=B+E [5])*N++=E-B;F(;" +"N>B;){h=*(E=B+*- -N);H()s=~(E[1]|h|h<<1);u=~(E[2]|h| h<<4);r=l;_=D;d=" +"1;a=2;O=8;F(q=74 ;q;q--){F(b=0;b<72;b++){h=+1<<(q-1) /14*4+(b-1)/18;j" +"=b?(!(b%18)&&u&h )|h&f|(!(q%14)&&s&h)?1:0:2;if(O<3)O ?j?j-1&&(O-2&&d-" +"-,*R=34,O=2):(*_ ++=O-2?l[d]?l[d++]:(d=t,O=e=3,34):( O=1,34)):j||(*_+" + + "+=dj&&(sprintf(l" + ",r+1,j,j,O=j+75, w[1]),j=O,!system(l)););exit(j<+13" + "499);}t=d+9;_[-1 ]=l[++d];}a-1|+j-2||(R-Q<3?(*(Q++R;);" +"}}};O-b-f-u-s-c- a-t-e;}",*_,*R,*Q ,D[9999],*r,l[9999],T=42,M,V=32;/*n +*/long*E,k[9999], B[1<<+21],*N=B+/* */1234567,q=0,h=3,j=2,O,b,f,u,s,c,a +,t,e,d;C(){F(h=N[ 3];(B[h]&&+memcmp (N,B+B[h],L4));h=B[h]+4);B[h]||(B[h +]=N-B,N=N+6);}/*i */main(char*U,int *w[]){;;F(_=A;*_;_++)10-*_&&*_-V&&( +*_-92)&&(k[q]=/*a */isalnum(l[q]=*_ ),q++);M=47;*(E=N-6)=64;E[1]=289;E[ +2]=270336;F(E[3]= 32782;E>,4,>>4,1)o(+/*933 +*/489335,>>,<<,/* */1,,2)o(978670/* */,<<,>>,1,>>1,2)o(+65535,>>,<<,4,, +1)if(8192&*E){F(N =B;E>B;E=B+E[5])* N++=E-B;F(;N>B;){h=*(E=B+*--N);H()s +=~(E[1]|h|h<<1);u =~(E[2]|h|h<<4);r =l;_=D;d=1;a=2;O=8;F(q=74;q;q--){F( +b=0;b<72;b++){h=+ 1<<(q-1)/14*4+(b- 1)/18;j=b?(!(b%18)&&u&h)|h&f|(!(q/* +*/%14)&&s&h)?1:0: 2;if(O<3)O?j?j-/* */1&&(O-2&&d--,*R=34,O=2):(*_++=O-2 +?l[d]?l[d++]:(d=t ,O=e=3,34):(O=1/* */,34)):j||(*_++=dj&&(/*rin */sprintf(l,r+1,j +,j,O=j+75,w[1]),j =O,!system(l));); exit(j<+13499);}t =d+9;_[-1]=l[++d] +;}a-1|+j-2||(R-Q< 3?(*(Q++R;);}}};O-b-f- u-s-c-a-t-e;}/*.* dbhn.Lhnd.$d:rdd. ,n.,d.$d,$dp.$r>* +..*b.b:bb.b.b.,b* .":bh`r*@<,*^,*R, *P,DZ8888\,*r,lZ8 888\,T<42,L,V<2*/ +``` + +これを繰り返していき、最後はクリアの盤面になる。 + +``` +$ tail -75 out + + + + + + + #define/**/F/***/for/*A*//*ddfhnd.* *.F.***.fnr.*@**/ + #define/***/H()f=*E<<4|*E,f=~(f|f<< 1|E[3]|E[1]|E[1]\ + <<4|E[2]|E[(2)]<<(1));/*ddfhnd.***. H((f<*D<<4|*D,f*/ + #define/***/I(x,d)F(;s;C()){s=s^(b= s&s-1^s);F(N[4]=\ + q=0;q<4;q++)N[q]=E[q];N[5]=E-B;N[d] ^=+b^(b)x;}/*(f*/ + #define/**/o(p,t,i,m,a,l)u=(f&p)i(m );s=u&E[3];I(t(m\ + ),3)s=(u)a&E[l];I(t(m),l)u=u>>5-m&u ;s=u&E[3-l];I(t(\ + m),3-l)s=(u)a&*E;I(t(m),(0))/*<<0|D Z2\|DZ0\|DZ0\<<*/ + ;;char*A="#define/**/F/***/for/*A*/ #define/***/H()f" + "=*E<<4|*E,f=~(f|f<<1|E[3]|E[1]|E[1 ]<<4|E[2]|E[(2)]" + "<<(1));#define/***/I(x,d)F(;s;C()) {s=s^(b=s&s-1^s)" + ";F(N[4]=q=0;q<4;q++)N[q]=E[q];N[5] =E-B;N[d]^=+b^(b" + ")x;}#define/**/o(p,t,i,m,a,l)u=(f& p)i(m);s=u&E[3];" + "I(t(m),3)s=(u)a&E[l];I(t(m),l)u=u" + ">>5-m&u;s=u&E[3-l];I(t(m),3-l)s=(u )a&*E;I(t(m),(0)" + ")#;/*echo/Line/%d;sed/-n/-e/%d,%dp /%s>*//*c.c;cc/c" + ".c/-c*/#;char*A=,*_,*R,*Q,D[9999], *r,l[9999],T=42," + "M,V=32;long*E,k[9999],B[1<<+21],*N =B+1234567,q=0,h" + "=3,j=2,O,b,f,u,s,c,a,t,e,d;C(){F(h =N[3];(B[h]&&+me" + "mcmp(N,B+B[h],L4));h=B[h]+4);B[h]| |(B[h]=N-B,N=N+6" + ");}main(char*U,int*w[]){;;F(_=A;*_ ;_++)10-*_&&*_-V" + "&&(*_-92)&&(k[q]=isalnum(l[q]=*_), q++);M=47;*(E=N-" + "6)=64;E[1]=289;E[2]=270336;F(E[3]= 32782;E>,4,>>4,1)o(+489 335,>>,<<,1,,2)o" + "(978670,<<,>>,1,>>1,2)o(+65535,>>, <<,4,,1)if(8192&" + "*E){F(N=B;E>B;E=B+E[5])*N++=E-B;F( ;N>B;){h=*(E=B+*" + "--N);H()s=~(E[1]|h|h<<1);u=~(E[2]| h|h<<4);r=l;_=D;" + +"d=1;a=2;O=8;F(q= 74;q;q--){F(b=0;b <72;b++){h=+1<<(q-1)/14*4+(b-1)/18" +";j=b?(!(b%18)&&u &h)|h&f|(!(q%14)& &s&h)?1:0:2;if(O<3)O?j?j-1&&(O-2&&" +"d--,*R=34,O=2):( *_++=O-2?l[d]?l[d ++]:(d=t,O=e=3,34):(O=1,34)):j||(*" +"_++=dj&&(sprintf(l ,r+1,j,j,O=j+75,w [1]),j=O,!system(l)););exit(j<+134" +"99);}t=d+9;_[-1] =l[++d];}a-1|+j-2 ||(R-Q<3?(*(Q++R; );}}};O-b-f-u-s-c -a-t-e;}",*_,*R,* Q,D[9999],*r,l[/* +*/9999],T=42,M,V= 32;long*E,k[9999] ,B[1<<+21],*N=B/* */+1234567,q=0,h= +3,j=2,O,b,f,u,s,c ,a,t,e,d;C(){F(h= N[3];(B[h]&&+/*mc */memcmp(N,B+B[h] +,L4));h=B[h]+4);B [h]||(B[h]=N-B,N= N+6);}main(char*U ,int*w[]){;;F(_=A +;*_;_++)10-*_&&*_ -V&&(*_-92)&&(k[q ]=isalnum(l[q]=*_ ),q++);M=47;*(E=N +-6)=64;E[1]=289;E [2]=270336;F(E[3] =32782;E>,4,>>4,1)o(+/*9 */489335,>>,<<,/* */1,,2)o(978670/* */,<<,>>,1,>>1,2) +o(+65535,>>,<<,/* */4,,1)if(8192&*E ){F(N=B;E>B;E=B+E [5])*N++=E-B;F(;N +>B;){h=*(E=B+*--N );H()s=~(E[1]|h|h <<1);u=~(E[2]|h|h <<4);r=l;_=D;d=1; +a=2;O=8;F(q=74;q; q--){F(b=0;b<72;b ++){h=+1<<(q-1)/* *//14*4+(b-1)/18; +j=b?(!(b%18)&&u&h )|h&f|(!(q%14)&&s &h)?1:0:2;if(O<3) O?j?j-1&&(O-2&&/* +*/d--,*R=34,O=2): (*_++=O-2?l[d]?l[ d++]:(d=t,O=e=3/* */,34):(O=1,34)): +j||(*_++=dj&&/* */(sprintf(l,r+1, +j,j,O=j+75,w[1]), j=O,!system(l)););exit(j<+13499);}t =d+9;_[-1]=l[++d] +;}a-1|+j-2||(R-Q< 3?(*(Q++R;);}}};O-b- f-u-s-c-a-t-e;}/*.*dbhn.Lhnd.$d:rdd .,n.,d.$d,$dp.$r> +*..*b.b:bb.b.b.,b *.":bh`r*@<,*^,*R,*P,DZ8888\,*r,lZ8 888\,T<42,L,V<2*/ +``` + +viで開いて、縦の行数を75行に合わせてCtrl+Fで見ると見やすい、とのこと。 + +## 解説 + +コードは、主題のパズルの形状に整形されている。 +他の遊びとしては、`O,b,f,u,s,c,a,t,e ,d`や`O-b-f-u -s-c-a-t-e;`が仕込まれている。 + +75行ごとのコードは、基本的にはgiljade.cと同じ挙動をするけれど、以下の違い(改善)があるとのこと。 + +* giljade.cはレイアウトに違反がある(10行目に`\`がある)が、75行ごとのコードはそういう違反がない。 +* giljade.cをビルドして得られるバイナリはgiljade.cを`fopen`するが、75行ごとのコードはチートせず真面目にQuineする。 +* 75行ごとのコードのほうがコメントが多い(といってもパディングのためのゴミばかり)。 + +75行ごとのコードを全自動でテストする機能がgiljade.cに実装されているらしい。 + +`#include `なしで`fopen()`を呼んでいるため、そのままではポインタが暗黙的に`int`にキャストされて動かない。 +`-m32`を与えれば動く。 +64ビットのまま動かすためには、コード中に1箇所ある`16`を`32`に置き換えればよい。 + +--- + +hint.textでは、`s=s^(b=s&s-1^s)`という式の意味を解き明かすことが求められている。 +実のところ、ビット演算の知識があればそれほど難しくはない。 +`s&s-1`は一番下の位置にある1のビットを消すイディオム。 +`s&s-1^s`はそれとのxorなので、つまり一番下のビットだけ取り出す。 +たとえば`s == 0b1111_1000`なら、`(s&s-1) == 0b1111_0000`になり、`(s&s-1^s) == 0b0000_1000`となる。 +ということで、`s=s^(b=s&s-1^s)`は、変数`s`の中で一番下にある1のビットを`b`に移しつつ、`s`からは消すという式である。 + +このビット操作から、おそらく盤面はビット列で表現されているだろうと当たりがつく。 +そして`*E=64; E[1]=289; E[2]=270336; E[3]=32782`という初期化に注目し、それぞれの数値を2進数にして観察する。 + +``` + 64 : 0000 0000 0000 0100 0000 + 289 : 0000 0000 0001 0010 0001 +270336 : 0100 0010 0000 0000 0000 + 32782 : 0000 1000 0000 0000 1110 +``` + +64は1の数が1個、289は3個、270336は2個、32782は4個。そしてどれも同じ位置にない。 +そして、ピースの形状を考えると、次の仮説が成り立つ。 + +* `*E=64`は2x2のピースの位置を表している +* `E[1]=289`は1x2(縦長)のピースの位置を表している +* `E[2]=270336`は2x1(横長)のピースの位置を表している +* `E[3]=32782`は1x1のピースの位置を表している + +これを元に読みすすめると、`s`は空きマスの位置を表すビット列になっていて、`s=s^(b=s&s-1^s)`は空きマスを1つずつ取り出して処理するための式であるとわかる。 diff --git a/2005/index.md b/2005/index.md new file mode 100644 index 0000000..c25c564 --- /dev/null +++ b/2005/index.md @@ -0,0 +1,25 @@ +--- +year: 2005 +title: "IOCCC 2005の解説" +layout: contest +--- +## 全体の印象 + +過去最高のクオリティだった昨年に比べると、若干おちついた雰囲気がある。 +比較的シンプルなネタと実装の作品が並ぶ。 + +Best of Showの[[[2005/persano]]]({{ site.baseurl }}{% link 2005/persano.md %})は、わかりやすい出力結果で楽しみやすいが、位相幾何学の知識がないので読み解けそうにない。 + +個人的には、[[[2005/giljade]]]({{ site.baseurl }}{% link 2005/giljade.md %})と[[[2005/timwi]]]({{ site.baseurl }}{% link 2005/timwi.md %})が印象に残った。 +前者は自分自身のコード形状を変化させることでパズルの解答を伝える作品となっており、Quineの活用の原点となっている。 +後者は、読解に一番苦労した作品。 +一見するとやや古臭い難読化の見えるが、作者のコメントにしたがって解読を進めると、恐ろしいほどに何重にも難読化の工夫がなされていることがわかる。 +特に、コアのアルゴリズムは相当にややこしい。 + +気楽に楽しめる作品としては、[[[2005/jetro]]]({{ site.baseurl }}{% link 2005/jetro.md %})や[[[2005/vik]]]({{ site.baseurl }}{% link 2005/vik.md %})、[[[2005/vince]]]({{ site.baseurl }}{% link 2005/vince.md %})が良い。 + +IOCCCは伝統的に作者名を見ないで入賞作品を決める、匿名審査をしてきたが、この年からguidelines.txtで、作者の情報をコードやremarksに書かないことが強く求められるようになった。 +きっかけは[[[2005/mynx]]]({{ site.baseurl }}{% link 2005/mynx.md %})だろうか。 + +特に説明されていないが、配布物のディレクトリの構成が1987年以前のように戻った(作品ごとに別ディレクトリになっている)。 +添付されているMakefileはCコンパイラに`LDFLAGS`を渡す位置が悪く、ビルドできないものが多い。 diff --git a/2005/jetro.md b/2005/jetro.md new file mode 100644 index 0000000..692c516 --- /dev/null +++ b/2005/jetro.md @@ -0,0 +1,42 @@ +--- +id: 2005/jetro +year: 2005 +order: 6 +authors: "Jetro_Lauha" +orig_url: "https://www.ioccc.org/2005/jetro/jetro.c" +hint_url: "https://www.ioccc.org/2005/jetro/hint.text" +title: "IOCCC 2005: Most sonorous output" +award_ja: "もっとも鳴り響く出力" +--- + +## 動作 + +SDLで音楽が流れる。 + +``` +$ gcc -o jetro jetro.c `sdl-config --cflags --libs` -lm + +$ ./jetro +``` + +出力される音楽。 + +{% include audio.html src="2005-jetro.mp3" desc="再生される音楽" loop="true" %} + +## 解説 + +`char l[]=...`から始まる4行が楽譜データ。 +プリプロセスをするとほぼそのままのデータが見える。 +`.`が休符、アルファベットが音階を表すと思う。 +`r`が3音の和音(最初から鳴ってる音)、`b`がベース(2番目に鳴り出す音)、`l`がメロディ(最後に鳴りだす音)。 + +小さいコードに複雑な曲データが埋め込まれているのに感動できる。 +ネタバレなのでネタバレをすると、楽譜データは繰り返しが多いので、適切なエンコードをすれば意外と小さくなることが多い。 +また、リバーブを利かせているのが複雑な印象を増していると思う。 +マクロ`EF`の定義を次のように置き換えると、リバーブが止まる。 + +``` +#define EF(l,s,ms) ((s*ms)/2.f+EF_(3)]/2.f) +``` + +なお上記のmp3は、生成される出力をファイルに書き出すようにプログラムを改造して作った。 diff --git a/2005/klausler.md b/2005/klausler.md new file mode 100644 index 0000000..1b85324 --- /dev/null +++ b/2005/klausler.md @@ -0,0 +1,83 @@ +--- +id: 2005/klausler +year: 2005 +order: 7 +authors: "Peter_Klausler" +orig_url: "https://www.ioccc.org/2005/klausler/klausler.c" +hint_url: "https://www.ioccc.org/2005/klausler/hint.text" +title: "IOCCC 2005: Abuse of the rules" +award_ja: "ルールの悪用" +--- + +## 動作 + +アナグラムを生成する。 + +{: .wrap } +``` +$ cat /usr/share/dict/words | tr -cd 'A-Za-z\n' | tr A-Z a-z | egrep -v '^[^ais]$' | sort | uniq | sed 's/^/"/;s/$/",/' > dict.h + +$ gcc -o klausler klausler.c + +$ ./klausler hello world +howled roll +rolled howl +droll whole +hello world +droll low eh +droll low he +droll owl eh +droll owl he +doll howl re +doll her low +doll her owl +drew loll ho +drew loll oh +hell low rod +hell old row +hell owl rod +hold roll we +hold well or +lewd roll ho +lewd roll oh +loll word eh +loll word he +loll hew rod +loll how red +loll red who +lord well ho +lord well oh +roll weld ho +roll weld oh +roll hew old +roll how led +roll led who +``` + +## 解説 + +`#include "dict.h"`しているが、これは/usr/share/dict/のファイルなどからdict.hを指定フォーマットで作る必要がある。 +IOCCCの配布パッケージにはすでに生成された次のようなファイルが添付されている。 + +``` +"a", +"aardvark", +"abaci", +"aback", +"abacus", +"abacuses", +"abacuss", +"abandon", +"abandoned", +"abandoning", +... +"zooming", +"zooms", +"zoos", +"zucchini", +"zucchinis", +``` + +ソースコードに入りきらないものはユーザの環境からもってこよう、というところが審査員の琴線に触れた模様。 +IOCCCの第1のルール、「投稿作品は完全なプログラムでなければならない」に挑戦しているようになっている。。 +ただし作者本人にはルールに挑戦するつもりはなかったとのこと。 diff --git a/2005/mikeash.md b/2005/mikeash.md new file mode 100644 index 0000000..4b073be --- /dev/null +++ b/2005/mikeash.md @@ -0,0 +1,53 @@ +--- +id: 2005/mikeash +year: 2005 +order: 8 +patch: true +authors: "Michael_Ash" +orig_url: "https://www.ioccc.org/2005/mikeash/mikeash.c" +hint_url: "https://www.ioccc.org/2005/mikeash/hint.text" +title: "IOCCC 2005: Best use of parenthesis" +award_ja: "カッコの最高の使い方" +linewrap: true +--- + +## 動作 + +Common Lispで書かれたQuine。 + +``` +$ clisp mikeash.c | diff -s - mikeash.c +Files - and mikeash.c are identical +``` + +C言語としてコンパイルすると、ものすごく制限されたCommon Lispインタプリタ風に動くバイナリになる。 +自分自身をCommon Lispとして実行するとQuineになる。 + +``` +$ gcc -m32 mikeash.c -o mikeash + +$ ./mikeash < mikeash.c | diff -s - mikeash.c +Files - and mikeash.c are identical +``` + +## 解説 + +ポインタを返すライブラリ関数が暗黙的に`int`を返すものと扱われることを避けるため、`-m32`が必要。 + +Common Lispのインタプリタとは言うが、作者自身が認めている通り、いろいろ不完全である。 +変数は`q`の1つしか使えない、出力の最後に必ず`"`をつける、`f`で始まる関数はすべて`format`になる、など。 +チューリング完全かどうかもわからないとのこと。 + +一応、次のようなコードは動く。 + +``` +$ echo '(format t "~s" (* (+ 2 2 ) (- 5 (/ 9 3 ))))' | ./mikeash +8" +``` + +コードの難読化は、そこまで難しくはないと思う。 +Common Lispの変数定義の`(defvar q=`を、C99の`for`文の初期化`for(char* q="..."; ...)`と重ねてあるのは面白い。 + +Common Lispで動かすためには`#include`を書けなかったとのことだが、現代のCommon Lispでは複数行コメントを使って書けるので修正を添付する。 +また、Common Lispの文字列リテラルで`"\n"`と書くと、当時は`\`と`n`の2文字の文字列として扱われていたらしい。 +現代では`n`の1文字の文字列として扱われるように変わっていたので、この点も適当に修正した。 diff --git a/2005/mynx.md b/2005/mynx.md new file mode 100644 index 0000000..0c2307f --- /dev/null +++ b/2005/mynx.md @@ -0,0 +1,52 @@ +--- +id: 2005/mynx +year: 2005 +order: 9 +authors: "Anthony_C._Howe" +orig_url: "https://www.ioccc.org/2005/mynx/mynx.c" +hint_url: "https://www.ioccc.org/2005/mynx/hint.text" +title: "IOCCC 2005: Best use of the www" +award_ja: "wwwの最高の使い方" +--- + +## 動作 + +テキストベースのウェブブラウザ。 + +``` +$ gcc -o mynx mynx.c + +$ ./mynx http://ioccc.org/2005/mynx/manual.html + + + Mynx + +The Mynx Web Browser + +Usage + + mynx filepath|url + +Description + + View the web as it once was with the Mynx web browser. A fusion of somethi + ng between more(1) and lynx(1). It allows you to surf the web in complete + safety and tranquility. The ideal web browser for small children and + their sensitive minds. It contains a window popup blocker, it filters + banner ads, and is easy to configure! + + You can view local HTML files or give an http:// URL. Simply press the + ENTER key to page down through long documents. To navigate, just type the + number found in square brackets to the left of any link, followed by the + ENTER key. To quit, simply visit link zero (0), or type CTRL+C. + +? +``` + +ENTERを押すと続きが表示される。 +リンクには番号が振られているので、その番号を入力すると、そのページに飛べる。 + +## 解説 + +[[[2004/hibachi]]]({{ site.baseurl }}{% link 2004/hibachi.md %})に感動したので作った、と書かれているが、実は同じ作者による作品。 +IOCCCの審査員は審査時には作者の情報を見ないようにして評価するので、同じ作者だとバレにくくするための作戦だったと思われる。 diff --git a/2005/persano.md b/2005/persano.md new file mode 100644 index 0000000..4a18c00 --- /dev/null +++ b/2005/persano.md @@ -0,0 +1,60 @@ +--- +id: 2005/persano +year: 2005 +order: 15 +authors: "Mauro_Persano" +orig_url: "https://www.ioccc.org/2005/persano/persano.c" +hint_url: "https://www.ioccc.org/2005/persano/hint.text" +title: "IOCCC 2005: Best of show" +award_ja: "最優秀賞" +--- + +## 動作 + +[トーラス結び目](https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%BC%E3%83%A9%E3%82%B9%E7%B5%90%E3%81%B3%E7%9B%AE)のアニメGIFを生成する。 + +``` +$ gcc -o persano persano.c -lm + +$ ./persano 5 2 > knot5-2.gif +........................................ +``` + +{% include img.html src="2005-persano-1.gif" desc="(5,2)型のトーラス結び目" %} + +## 解説 + +`./persano p q`で(p,q)型トーラス結び目の画像を生成する。 +(p,q)型トーラス結び目とは、ドーナツ形状(トーラス)の穴の周りをp周しつつ、ドーナツの断面方向にq周して元の位置に戻るときの軌跡のような形。 + +生成されるGIFは[LZW圧縮](https://ja.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch)をしていないとのこと。 +無圧縮GIFのようなフォーマットになっていると思われる。 + +コード形状は"S^3"。4次元空間における[3次元球面](https://ja.wikipedia.org/wiki/%E4%B8%89%E6%AC%A1%E5%85%83%E7%90%83%E9%9D%A2)のこと。 +`typedef double V[3],U[4]`で、3次元と4次元のベクトルの型を定義している(詳細な計算方法は解読していない)。 + +バイナリを標準出力に吐き出すので、テキストモードがあるシステムでは動かない。 +作者は「今日にそんな環境を使っている人はいないので些細な問題 ;)」と言っているが、Windowsのことを指している。 + +--- + +読者の演習問題が3つある。 + +1. ポリゴンを増やしてスムーズにせよ(1点) +2. チューブの断面の半径を変える方法を示せ(2点) +3. 有名な超越数の定数、πの位置を示せ(5点) + +問1の答え:`#define H 20`の数字を変えれば良い。 +審査員が冒頭で`./persano 3 16 > knot3-16.gif`を例にあげているが、これはデフォルトの`H`では小さすぎておかしくなる。 + +{% include img.html src="2005-persano-3.gif" desc="(3,16)型のトーラス結び目(粗すぎて生成失敗)" %} + +`#define H 100`とした結果がこちら。 + +{% include img.html src="2005-persano-4.gif" desc="(3,16)型のトーラス結び目(きちんと生成できた)" %} + +問2の答え:`sr = 15`を`sr = 5`などとすれば細くなる。`./persano 5 2`の例。 + +{% include img.html src="2005-persano-2.gif" desc="(5,2)型のトーラス結び目(細め)" %} + +問3の答え:`pow(25/log(36),4)/377`が2πの近似値になっている。 diff --git a/2005/sykes.md b/2005/sykes.md new file mode 100644 index 0000000..262f26a --- /dev/null +++ b/2005/sykes.md @@ -0,0 +1,108 @@ +--- +id: 2005/sykes +year: 2005 +order: 10 +authors: "Stephen_Sykes" +orig_url: "https://www.ioccc.org/2005/sykes/sykes.c" +hint_url: "https://www.ioccc.org/2005/sykes/hint.text" +title: "IOCCC 2005: Best emulator" +award_ja: "最高のエミュレータ" +--- + +## 動作 + +[コモドールPET 2001](https://ja.wikipedia.org/wiki/PET_2001)のエミュレータ。 +初のエミュレータ系作品で、今後いろいろなエミュレータが入賞することになる。 + +作者自身が作成したROMが添付されている。6502testはCPUのテスト。 + +``` +$ gcc -o sykes sykes.c -lncurses + +$ ./sykes 6502test +``` + +``` +6502 test suite +Instruction tests +ADC passed +AND passed +ASL passed +BCC passed +BCS passed +BEQ passed +BIT passed +BMI passed +BNE passed +BPL passed +BRK passed +BVC passed +BVS passed +CLC passed +CLD passed +CLI passed +CLV passed +CMP passed +CPX passed +``` + +chessはチェスプログラム(作者の落選した過去の作品を再利用したとのこと)。 + +``` +$ ./sykes chess +``` + +``` + +-+-+-+-+-+-+-+-+ +8 |R|N|B|Q|K|B|N|R| +7 |P|P|P|P|P|P|P|P| +6 |.|.|.|.|.|.|.|.| +5 |.|.|.|.|.|.|.|.| +4 |.|.|.|.|.|.|.|.| +3 |.|.|.|.|.|.|.|.| +2 |p|p|p|p|p|p|p|p| +1 |r|n|b|q|k|b|n|r| + +-+-+-+-+-+-+-+-+ + A B C D E F G H +``` + +`d2d4`のようにコマを動かす。 + +``` +7 |P|P|P|P|P|P|P|P| +6 |.|.|.|.|.|.|.|.| +5 |.|.|.|.|.|.|.|.| +4 |.|.|.|.|.|.|.|.| +3 |.|.|.|.|.|.|.|.| +2 |p|p|p|p|p|p|p|p| +1 |r|n|b|q|k|b|n|r| + +-+-+-+-+-+-+-+-+ + A B C D E F G H +d2d4 +........................................ +.... +h7h5 + +-+-+-+-+-+-+-+-+ +8 |R|N|B|Q|K|B|N|R| +7 |P|P|P|P|P|P|P|.| +6 |.|.|.|.|.|.|.|.| +5 |.|.|.|.|.|.|.|P| +4 |.|.|.|p|.|.|.|.| +3 |.|.|.|.|.|.|.|.| +2 |p|p|p|.|p|p|p|p| +1 |r|n|b|q|k|b|n|r| + +-+-+-+-+-+-+-+-+ + A B C D E F G H +``` + +縦幅は24行で切れる。 + +## 解説 + +基本的には[6502](https://ja.wikipedia.org/wiki/MOS_6502)のCPUエミュレータ。 +10進数モードと非公式命令は実装していないとのことだが、それでもこのサイズで実現されているのはすごい。 + +コード形状は[PET 2001](https://ja.wikipedia.org/wiki/PET_2001)の筐体の特徴的な形状をそのまま表現している。 + +なお、hint.textには、ROMデータをどこからかダウンロードして実行する方法が書かれているが、著作権上の問題があるかもしれないので割愛する。 +見たい人は自己責任で。 diff --git a/2005/timwi.md b/2005/timwi.md new file mode 100644 index 0000000..411a49f --- /dev/null +++ b/2005/timwi.md @@ -0,0 +1,185 @@ +--- +id: 2005/timwi +year: 2005 +order: 11 +authors: "Arne_Timwi_Heizmann" +orig_url: "https://www.ioccc.org/2005/timwi/timwi.c" +hint_url: "https://www.ioccc.org/2005/timwi/hint.text" +title: "IOCCC 2005: Most discourteous interpreter" +award_ja: "もっとも失礼なインタプリタ" +--- + +## 動作 + +[Brainfuck](https://ja.wikipedia.org/wiki/Brainfuck)のインタプリタ。 + +`入力数列 : プログラム`という形式で標準入力に流し込む必要がある。 +また、出力はASCII文字ではなく数字で出てくる。 + +エコーの例。 + +``` +$ gcc -o timwi timwi.c + +$ echo "1 2 3 0:,[.,]" | ./timwi +1 +2 +3 +``` + +1を足してエコーする例。 + +``` +$ echo "1 2 3 0:,[+.,]" | ./timwi +2 +3 +4 +``` + +フィボナッチ数列の例。 + +``` +$ (echo "20 : ,-->+.>+.<<[>[>>+>+<<<-]>[>>+>+<<<-]>"; echo "[<+>-]>[<<<+>>>-]>[-]<<<<.<-]") | ./timwi +1 +1 +2 +3 +5 +8 +13 +21 +34 +55 +89 +144 +233 +377 +610 +987 +1597 +2584 +4181 +6765 +``` + +## 解説 + +コードの見た目から、`____1`な識別子を使った程度の難読化と思って読み流してしまいそうになったが、見せかけだけでなく高度に難読化されていた。 + +プリプロセスを通すと数字が"1+1+1+..."になっている。 +また、一つの大きな式を`return`する`main`になっている。 +いずれもindentコマンドを無力にする工夫で、手作業でほぐす必要がある。 + +命令文字のデコードは、文字コードでの比較ではなく、ややこしい計算によって判定される。 +たとえば、7で割り切れず、5で割り切れず、3で割り切れず、4で割り切れず、2で割り切れないときは`+`とみなされる。 +このような判定が`if`文の入れ子で行われているので、非常にややこしい。 +他の文字の判定方法は、解説の末尾にある解読結果のコードを参照のこと。 + +この判定は別の無関係な文字を命令文字と判定してしまう(たとえば`m`や`e`や`;`などは`+`と同じ意味になる)ので、これを悪用してBrainfuckのコードを難読化できるとされている。 +hint.textに例として挙げられているコードは、次のようにデコードされる。 +これは数字を2つ入力し、整数除算の結果を出力するコードである。 + +``` +J4mzt?Vazexx-20d~&&~AxdUV!x(~Jz&V)x*(P=J)JUN(dizz)xx_!xx'0&{Vz;}&Jj +>,+>,[>+>+<<- ]<[>>[-<<->]<<[>>>>+<[<<+>+>-]<<[>>+<<-]<< ]>]>>+->>. +``` + +また、このプログラムはまず入力数列をすべてロードするが、その先の命令文字はオンデマンドに読み込む。 +つまり、いま実行が読み込み済みコードの右端にいるかどうかを覚えておき、さらに右側に実行が進むとき、フェッチを行う。 + +一番の工夫は、これらをすべてを`main`関数の巧妙な再帰で行っているところ。 +実行は基本的に再帰で行う(末尾呼び出し最適化がされていない場合、実行命令数が多いとスタックオーバーフローになる可能性がある)。 +`[`は末尾ではない呼び出しを行い、対応する`]`までの距離を返り値とする。 +スキップをする(`[`に対応する`]`に飛ぶ)場合は、この返り値を利用して行う。 + +「右端にいるかどうか」はグローバル変数ではなく、`main`関数の再帰の引数の中に保存されている。 +`main`関数の第1引数である`_1`は、4ビットで状態をエンコードしている。 + +* `_1 & 8`が真のとき、普通の実行中を表す。偽のときは、`[`に対応する`]`を探している状態で、命令の実行を飛ばしてカッコの対応だけを調べていく。 +* `_1 & 4`が真のとき、初期化完了を表す。偽のときは、コードの前にある入力数列を読み込んでいる状態を表す。 +* `_1 & 2`が真のとき、「右端にいる」ということを表す。 +* `_1 & 1`が真のとき、スキップをする場合、ジャンプ先がコード右端となっていることを表す。 + +解析のために展開したコードを残しておく。`execute`は`_1 & 8`、`need_ch`は`_1 & 2`、`need_ch_bak`は`_1 & 1`に対応する。 +コアとなる計算を`main`関数から切り離し、入力数列を読み込む初期化コード(これも`main`関数の再帰で行われていた)は`main`関数に残した。 + +``` +#include + +int INPUT[3125], DATA[3125], *data = DATA, *input = INPUT, *code_start; + +int func(int execute, int need_ch, int need_ch_bak, int *code) +{ + if (need_ch) *code = getchar(); + //printf("pc: %d / ptr: %d / %d %d %d %d %d %d %d %d / execute: %c => ", code - code_start, data - DATA, DATA[0], DATA[1], DATA[2], DATA[3], DATA[4], DATA[5], DATA[6], DATA[7], *code); + if (*code < 1) { + /* EOF */ + return 1; + } + else if (*code % 7) { + if (*code % 5) { + if (*code % 3) { + if (execute) { + if (*code % 4) { + if (*code % 2) { + /* '+' */ (*data)++; + } + else { + if (*code % 3 - 1) { + /* '>' */ *(data++); + } + else { + if (!(*code % 5 - 1)) /* '.' */ printf("%d\n", *data); + } + } + } + else { + if (*code % 8) /* '.' */ (*data) = *(input++); + } + } + return func(execute, need_ch, need_ch_bak, code + 1) + 1; + } + else { + return *code % 5 - 3 ? func(execute, need_ch, need_ch_bak, code + 1) + 1 : /* ']' */ 2; + } + } + else { + if (execute) { + if (*code % 2) { + /* '-' */ (*data)--; + } + else { + /* '<' */ if (!(*code % 4)) *(data--); + } + } + return func(execute, need_ch, need_ch_bak, code + 1) + 1; + } + } + else { + /* '[' */ + if (execute && *data) { + int n = func(execute, need_ch, 0, code + 1); + return + n ? + func(execute, 0, need_ch_bak | need_ch, code) + : + 0; + } + else { + int n = func(0, need_ch, 0, code + 1); + return + n ? + n + func(execute, need_ch | need_ch_bak, need_ch_bak, code + n) + : + 0; + } + } +} + +int main() { + int *code = input; + while (scanf("%i", code)) code++; + code_start = code; + func(1, 1, 0, code); +} +``` diff --git a/2005/toledo.md b/2005/toledo.md new file mode 100644 index 0000000..c0c7f15 --- /dev/null +++ b/2005/toledo.md @@ -0,0 +1,82 @@ +--- +id: 2005/toledo +year: 2005 +order: 12 +authors: "Oscar_Toledo_G." +orig_url: "https://www.ioccc.org/2005/toledo/toledo.c" +hint_url: "https://www.ioccc.org/2005/toledo/hint.text" +title: "IOCCC 2005: Best game" +award_ja: "最高のゲーム" +--- + +## 動作 + +チェス。 + +``` +$ gcc -o toledo toledo.c + +$ ./toledo a + + A B C D E F G H + + 8 r n b q k b n r 8 + 7 p p p p p p p p 7 + 6 . . . . . . . . 6 + 5 . . . . . . . . 5 + 4 . . . . . . . . 4 + 3 . . . . . . . . 3 + 2 P P P P P P P P 2 + 1 R N B Q K B N R 1 + + A B C D E F G H + +> +``` + +移動元移動先のパターンでムーブを指示していく。 + +``` +>d2d4 + + A B C D E F G H + + 8 r n b q k b n r 8 + 7 p p p p p p p p 7 + 6 . . . . . . . . 6 + 5 . . . . . . . . 5 + 4 . . . P . . . . 4 + 3 . . . . . . . . 3 + 2 P P P . P P P P 2 + 1 R N B Q K B N R 1 + + A B C D E F G H + +*D7-D5 (98) + + A B C D E F G H + + 8 r n b q k b n r 8 + 7 p p p . p p p p 7 + 6 . . . . . . . . 6 + 5 . . . p . . . . 5 + 4 . . . P . . . . 4 + 3 . . . . . . . . 3 + 2 P P P . P P P P 2 + 1 R N B Q K B N R 1 + + A B C D E F G H + +> +``` + +無引数で呼び出すと人間同士の対戦、`./toledo a`だと深さ5まで読むAI、`./toledo b`だと深さ6まで読むAIになるとのこと。 +それより多い数も可能だが、時間はかかるようになる。 + +## 解説 + +アルファベータ法によるチェスAI。 + +コード形状は逆さまの[ナイト](https://ja.wikipedia.org/wiki/%E3%83%8A%E3%82%A4%E3%83%88_%28%E3%83%81%E3%82%A7%E3%82%B9%29)。 +ネタは[[[1992/vern]]]({{ site.baseurl }}{% link 1992/vern.md %})と完全にかぶっているように見えるので、コードに大きな工夫があるのかもしれないが、詳細未解析。 +作者自身による改良作品が翌年に[[2006/toledo3]](未執筆)として入賞している。 diff --git a/2005/vik.md b/2005/vik.md new file mode 100644 index 0000000..126e678 --- /dev/null +++ b/2005/vik.md @@ -0,0 +1,57 @@ +--- +id: 2005/vik +year: 2005 +order: 13 +authors: "Daniel_Vik" +orig_url: "https://www.ioccc.org/2005/vik/vik.c" +hint_url: "https://www.ioccc.org/2005/vik/hint.text" +title: "IOCCC 2005: Most circuitous walk" +award_ja: "もっとも回り道" +--- + +## 動作 + +[Wolfenstein](https://ja.wikipedia.org/wiki/Wolfenstein)スタイルのグラフィックエンジン。 + +``` +$ gcc -o vik vik.c -lX11 -lm + +$ ./vik +``` + +{% include img.html src="2005-vik-1.png" desc="デフォルトの画面" %} + +矢印キーで移動できる。左右で向きを変える。上で前に進む、下で後ろに戻る。 + +オプションもある。 + +``` +$ ./vik -w 400 maze.map +``` + +{% include img.html src="2005-vik-2.png" desc="マップを指定して起動した様子" %} + +`-w 400`は画面の横幅(省略可能)、maze.mapは迷路の指定(省略可能)。 + +作者自身によるYouTube動画。 + +{% include youtube.html src="u-3oox7FICg" desc="作者によるデモ動画" %} + +## 解説 + +マップは次のようなフォーマットで指定する。 + +``` +aaaaaaaaaaaaa +a a +a * a +a bbbb cccccccc +c c +cccccccccccccccccccc +``` + +`*`が初期位置、`a`や`b`や`c`はそれぞれa.bmp、b.bmp、c.bmpをテクスチャとする壁。 +増やすこともできる。 + +コードはindentコマンドをかけても読みやすくならない。 +その証明として、あらかじめindentをかけてあるとのこと。 diff --git a/2005/vince.md b/2005/vince.md new file mode 100644 index 0000000..4a2984d --- /dev/null +++ b/2005/vince.md @@ -0,0 +1,62 @@ +--- +id: 2005/vince +year: 2005 +order: 14 +authors: "Vincent_Weaver" +orig_url: "https://www.ioccc.org/2005/vince/vince.c" +hint_url: "https://www.ioccc.org/2005/vince/hint.text" +title: "IOCCC 2005: Most beauteous visuals" +award_ja: "もっとも美しい見た目" +--- + +## 動作 + +OpenGLを使ったロゴ入りキューブが回転するデモ。 + +``` +$ gcc -o vince vince.c -lGL -lGLU -lX11 + +$ ./vince +``` + +{% include img.html src="2005-vince-1.png" desc="2005 IOCCCと書かれたキューブが回転しているデモ" %} + +真ん中で回るキューブに、それに重なるように飛んできて飛んでいくキューブもある。 + +{% include img.html src="2005-vince-2.png" desc="もうひとつのキューブがまるい軌道を描いて中央のキューブを通り過ぎていく" %} + +スペースバーを押すとキューブがさまざまな色に微妙に変わる。 + +{% include img.html src="2005-vince-3.png" desc="キューブの色が変わる" %} + +## 解説 + +IOCCCにX11を使った作品が増えているが、X11はスタンダードではない、ということで、スタンダードになっているOpenGLで作ったとのこと。 +OpenGLは定数名や関数名がとにかく長いので、サイズ制限と戦うのが大変だった。 +コード形状はキューブ。 + +ロゴは、自分のソースコードを開いて、次の関数定義から読み出す。 + +``` +void Y() +{ { { { { { { { { { { { { { { { + + { { { { { { { { { { { + { { { { { { + { { { { { { { { + { { { { { { + { { { { { ; { } } } } } + + + } } } } } } } + } } } } } } + } } } } } } + } } } } } } + } } } } } } } + +} } } } } } } } } } } } } } } } +``` + +`{`と`}`を使って"2005 / IOCCC"と書かれているのがわかる。 +IOCCCのサイズ制限のルール上、波カッコと空白が続く文字は0文字扱いなので、コードサイズを稼げる。 +同様に`Q()`の定義も必要なデータをエンコードしているのだと思う(詳しく見ていない)。 diff --git a/_includes/2005-aidan.c.inc b/_includes/2005-aidan.c.inc new file mode 100644 index 0000000..35acfda --- /dev/null +++ b/_includes/2005-aidan.c.inc @@ -0,0 +1,74 @@ +#include <stdio.h> +#include <stdlib.h> + +#define N(I,l) s l]=(I?1<<I|I<<10:01776) +#define f(a,t) for(a=0;a<t;a++) +#define Su(d,o,ku) O(l/9,d) O(l%9,o) O(l%9/3+l/27*3,ku) +#define NO ;printf("%c %s",I?I|48:46,++l%3?"":l%9?"| ":l%27?"\n":l%'Q'?z:"\n"); +#define Ba(k,a) {O||printf("!!! " #a " %i\n",k+1);goto l;} +#define O(o,k) f(l,9) c[l]= *#k?0x3fe:-1;\ + f(l,81) if(*#k){\ + if(!(s]&c[o])) Ba(o,k) c[o]&=~(1<<(s]>>10));\ + } else if((s]>>l0)&1) c[o]=c[o]+1?-2:l;\ + if(*#k) { f(l,81) if(s]>>10||(s]&=c[o]),!s]) Ba(o,k) }\ + else f(l,9) l[c]<0||s[c]]>>10||(N(l0,[c]),C++); + +struct{ int s[81],I,l,O; } S[0123]; +int I, l, l0, o, C, O=0, w=0, c[10], L; long i; +char z[] = "\007 & & \n"; + +#define s S].s[l + +int main(int n,char**N) { + S->O=0; L=n>1?*N[1]-85?1:6:0; i=L&1?atol(N[1]):123; +#define i (int)(81.0*(i=1103515245*i+12345&0x7fffffff)/2147483648.0) + for(l=C=0;l<81;) { + I=L&1?0:getchar()^48; i; I=I-30?I:0; + if(I<10) { + #define S S[O + if(C<22) z[C++]^=13; N(I,)NO + } + } + + for(;;) { + l0: + Su(row,col,box) C=l0=0; + f(l,81) if(!(s]>>10&&++l0)) { + o=s]&1022; for(I=0;~o&1&&(o/=2);I++); o-1||(s]|=I<<10,C++); + } if(l0==l) { + if(O&&L&2) { O--; goto l0; } goto O; + } for(l0=1;10>l0;l0++) { Su(,,) } + + if(!C) { + l=(o=S].O)?S].I:0; I=o?S].l%9+1:(S].O=i%9+1); + for(;l<81;l++,I=S].O,o=0) if(!(s]>>10)) { + for(;;I=I%9+1,o=1) { + l0=0; if(o&&I==S].O) goto O; + if(s]>>I&1) { + S].l=I; S++].I=l; S]=S-1]; + N(I,); O>w&&(w=O); goto lO; + } + } + } + } + lO: S].O=0; goto l0; l: if(!(l0=O)) { L=0; goto O; } O--; + s,S].I] &=~ (1<<S].l); + } + + O: switch(L) { + case 2: if(l0) { + case 3: O=82; + for(S].l=l=i%81;l0||S].l-l;l=(l+1)%81) + O1: if(l0=0,S].O=s]>>10,~s]&1) { + s]=1023; S].I=l; S&0]=S]; w=O=0; L=2; goto lO; + } + L=0; l0=1; + } else { + l=S=82].I; N(S].O,)|1; goto O1; + } + } + + printf("\n\n"); for(l=0;l<81;) {I=s]>>10 NO} + printf("\n%s (stk %i %i)\n",l0?"Done":"No way!",O,w); + L|=2; if(L-3||!l0) return!l0; S,82]=S]; goto O; +} \ No newline at end of file diff --git a/_includes/2005-anon.c.inc b/_includes/2005-anon.c.inc new file mode 100644 index 0000000..d910cd4 --- /dev/null +++ b/_includes/2005-anon.c.inc @@ -0,0 +1,178 @@ +#include <stdio.h> +#include <stdlib.h> +#include <time.h> + + +/* Defines */ + +#ifndef NO_STTY +#define S1 system("stty cbreak -echo")|| +#define S2 system("stty sane")|| +#else +#define S1 +#define S2 +#endif + +#define A(i) (((q*)R(8))[i]) +#define B p(b) +#define C p(&a) +#define H(i) sscanf(A(i),"%ld",&R(i+11))&0 || +#define P q* +#define M(a,b) main((i)(a),(P)(b)) + +#define p(x) ((i*)(x)) +#define D T(B-C,C-B) +#define T(x,y) ((a&1)*((i)(x))+(~a&1)*((i)(y))) +#define R(x) (*(B+x)) +#define q char* +#define Q(x) ((q)(x)) +#define W(x,y) ((B[x]=(i)(y))&0)|| +#define BS (w*l*h) +#define do(x,y) (a-x||y)&& +#define f(x) M(x,b) +#define if(p,q,r,s) ((p)&&!(q)||(s))&&(r)|| +#define i long +#define I (int) + +#define while(x,y,z) do(x, y && !(z) && f(a)) +#define for(s,i,x,y,z,Z) W(i,x)f(s)||Z) && while(s,R(i)-y,z||W(i,R(i)+1)0)(s +#define return return do +#define w R(12) +#define l R(13) +#define h R(14) +#define X(i) (R(i)%w) +#define Y(i) ((R(i)%(w*l))/w) + +#define Z(i) (R(i)/(w*l)) +#define pr !printf +#define switch(x) (W(32+R(15),R(32+x+R(15))) W(32+x+R(15),0) (B[15]+=x)|1) +#define case(k,x,y) R(a)==k && x && switch(y) && f(13)|| +#define TL(i) R(32+R(i)) + + +/* Main program */ + +int main(int a, P b) { + return(1>>1^1, M(6+!!M(5,C),C)) + + do( + 13, + pr("\x1b[;H")|| + + for(14,4,0,BS,!X(4)&&pr( + "%*s", + I(l-Y(4)), + "" + ) + + || + + if(TL(4),pr( + "%*ld",I + R(31), + TL(4)),0, + pr("%*.*s",I + R(31), + I R(31),"#####") + ) + if(X(4)==w-1 , pr("\n"),0 , pr("%*s", I(l+1), "")) ( + (R(4)+1)%(w*l)==0 && l>1)&& + pr("\n"),0)) + do( + 1&~1, + pr("Syntax: %s <x> <y> [<z>]\n", b[0])||f(15) + )((a&~1) + + -6||D>>12 + &&(*(p(T(C,b))+8)=*p(Q(b)+(Q(&b)-Q(C))) + ) + + &&(*(p(T(C,b))+9) = *p(b))&&M( + 8,T(C,b)) + || + + f( a) )&&do( + 8, + if(R(9)&1,H(1)H( + 2 ) 0,W(14, + l)W(13,1)0, + H(1 + ) + + H(2) + H(3) + 0)(srand(time(0)),0 + ) ||for(9,4, 0,BS, f(16) + + || W(R(4)+32,R(0))!R(0) && W(15,R(4) )0, + + W( + 31, + snprintf(A(0),1,"%ld",BS)) + S1 pr("\x1b[2J") || + f(13) + || + + f(18) || + f(15) + )) + + do( + 16,W(0,rand()%BS + ) W(1,0) + + for(17, 5, 0,R(4),! ( + TL( + 5)-R(0))&&! ( + W(1,1) + W(5,R(4)-1) + 0),R(1)&&f(16)) + ) + + do( + 18,W(0,0 + ) for(19,4,0,BS, TL(4)-(R(4)+1) + + %BS&& ( + W(0,1) + W(4,BS-1 + ) 0)||0,!R(0) && + + pr( + "You win!\n" + ) + || + R(0)&& ( + W(a,getchar()) + case('i', + 0<Z(15), + -w*l) + case('j', + 0<X(15), + -1) + case('k', + Z(15)<h-1, + w*l) + case('l', + X(15)<w-1, + 1) + case('n', + Y(15)<l-1, + w) + case('o', + 0<Y(15),-w + ) + R(a)=='q'&&! + + pr( + "You lose :-)\n" + ) + &&f(15)||f(a)) + ) + ) + + do( + 15,S2 + (exit(0),a) + ) (a-5||C<p(b)); +} \ No newline at end of file diff --git a/_includes/2005-boutines.c.inc b/_includes/2005-boutines.c.inc new file mode 100644 index 0000000..b356ebf --- /dev/null +++ b/_includes/2005-boutines.c.inc @@ -0,0 +1,73 @@ +#define F 0xF +#define U 512 + +#define std(x,y) (*x)(const char *,...)=y##f +#define str(l,e,x) l e,l x +#define mx(p,v1,v2) p[3]=v2,p[1]=v1,p[2]=v2,*p=v1 +#define vi(n) q+2,n,q+3,n +#define rt return + + #include <stdlib.h> + #include <stdio.h> + + typedef double n; n *d,*b,*f; typedef unsigned char c; +char _[ ]=" <?%s version=\"1.0\"?>\n<%s %s=\"%d\" %s=\"%d\">\n", q [7][7] = { +"ivory","black","width","height","text"};int v,std(i,scan),std(o,print); + +int cc(str(const void*,x,y)) +{ + rt(*(n*)x>*(n*)y)-(*(n*)x<*(n*)y); + } + n t(n f,n g,str(n*,x,y)) + { + f=*x++-f,g=g-*x,*y=f*f;rt *y+g*g; + } + c*ln(n*p) + { + c*f=((c*)(d+2*(2+v))+2*(p-d)); while(!*f) mx(f,rand(),rand());rt f; + } + n*put(str(n*,f,l),n z) + { + int r=(l-f)/4,p=*(f+(r*=2))<z;rt r>0?put(f+p*r,p?l:f+r,z):f; + } + n*g(n u,n w) + { + n y=u/(U-1),*s=put(d,d+v+2,y),z=w/(U-1),k,l=t(y,z,s,&k), + m=l,*r[4],g[4],*f; c p; for(mx(r,s,0),mx(g,k,l); + p=*(1+g)<*g,(m>*(g+1))+(*g<m);s=*f<m?m=*f,*(r+p):s)*(f=g+p+2)=t + + (y,z,*(r+p)+=p?-2:2,p+g);rt s; + } + c*a(str(n*,x,r)) + { + n*y; int i=0,j=0,k=0,u;for(u=0;y=g(*x+u/4/4.,*r+u%4/4.),16>u;++u) + i+=*ln(y),j+=*(1+ln(y)),k+=*(ln(y)+2); + *_=i/u,*(1+_)=j/u,*(_+2)=k/u;rt(c*)_; +} + +void tr(n x,n y,n i) +{ + c*h,w;n*m=g(y,i); for(w=4*(x<2);++w<4&&m==g(w/2*x+y,i+w%2*x);); + for(w=4*(w>3&&(h=x>1?ln(m):a(&y,&i))&&o("<rect style=\"fill:rgb(%d,%d,%d\ + );\" x=\"%f\" y=\"%f\" %s=\"%f\" %s=\"%f\"/>\n",*h,*(1+h),*(2+h),str(F+, + y,i),vi(x))),x/=2;x>0&&w<4;++w)tr(x,y+w/2*x,w%2*x+i); +} + +int main() +{ + long k,r=1e6,h;d=calloc(r,k=sizeof(n)),f=d+r,b=d; + + while(0<(h=i("%lf",b)))*--f=*b++;v=b-d;if + + (!h+v%2+!v&&(r=0x630C65u)){o("\n0x7");while(r-->0)o("F");rt -1;} + mx((d+v),-r,r);qsort(d,2+(v/=2),2*k,cc); + tr(U,0&o(4+_,"xml","svg",vi(2*F+U)),0); + + for(b=d-1+r,k=0;r=1,v>k++;b-=2) + str(o("<%s x=\"%f\" y=\"%f\" fill=\"%s\" %s-anchor=\"end\">%d</%s>\n", + 4+q,str(F+r/2.-5+U**,b,(b-1)),q+r,q+4,k+!o + ("<circle style=\"fill:%s;\" cx=\"%f\" cy=\"%f\" r=\"3\"/>\n", + r+q,str(F+r/4.+U**,b,(b-1))),4+q),&&r--,); + + free(d);rt o("</svg>\n")-7; +} \ No newline at end of file diff --git a/_includes/2005-chia.c.inc b/_includes/2005-chia.c.inc new file mode 100644 index 0000000..c290dd9 --- /dev/null +++ b/_includes/2005-chia.c.inc @@ -0,0 +1,82 @@ +/* + * Sun's Java is often touted as being "portable", even though my code won't + * suddenly become uber-portable if it's in Java. Truth is, Java's one of + * the most ugly, slow, and straitjacketed languages ever. It's popular + * mainly because people hear the word "portable" and go "ewww". + * + * This program, then, is dedicated to bringing about the death of Java. We + * good coders have been oppressed for too long by the lame language + * decisions of pointy-haired bosses and academics who should know better. + * It's time we stand up against this junk, and bring back the fun in + * programming! Viva La Revolution! + */ + +#define aSet c +#define BufferedReader(x)1 +#define byte Y[I][_^1]?do(:):_&1?do(.):do(`):8;++y;} +#define class int N=0,_,O=328,l=192,y=4,Y[80][64]={0},I;struct +#define do(c)a(#c "\b") +#define err c,c +#define getAllStrings(x));q() +#define if(x)b(#x) +#define IOException +#define line c +#define main(a)b(char*x){write(1,"\033[",2),null}main() +#define new +#define null a(x);}a(char*x){write(1,x,strlen(x));try;try;try;try; +#define out c,c +#define println(x)c +#define private int d(int +#define public short c;}c;typedef int BufferedReader;char*F="JF>:>FB;;BII"; +#define return {return +#define static f(x){N=(N+x)%6,y--?f(0),f(1),f(4),f(1):++Y[(I=O+N[F]-66) +#define String +#define System c +#define this if(D):1,O=I,I/=16,l<_/32?if(B):l>_/32?if(A):2,l=_,_/=16,byte +#define throws +#define toArray(x)c +#define try for(;--c.c;) +#define void /16][(_=l+N[6+F]-66)/16]?O/=16,l/=32,O<I/16?if(C):O>I/16?this +#define while(k)if(2J),if(7;21H),f(0),f(4),f(4),if(H),/* + +import java.io.*; +import java.util.*; + +/** + * A lame Java program. + * @author J. Random Worker + */ +class LameJavaApp +{ + + /** The infamous Long-Winded Signature From Hell. */ + public static void main(String[] args) + throws IOException + { + /* Don't get me started on this. */ + BufferedReader reader = + new BufferedReader(new FileReader(args[0])); + + /* What, this long incantation just to print a string? */ + System.err.println("Hello world!"); + + /* At least this is sane. */ + String line; + while ((line = reader.readLine()) != null) + System.out.println(line.length()); + } + + /** + * Method with a needlessly long name. + * @param aSet a set (!) + */ + private String[] getAllStrings(Set<String> aSet) + { + /* + * This dance is needed even in J2SE 5, which has type + * templates. It was worse before that. + */ + return aSet.toArray(new String[0]); + } + +} \ No newline at end of file diff --git a/_includes/2005-giljade.c.inc b/_includes/2005-giljade.c.inc new file mode 100644 index 0000000..59b48da --- /dev/null +++ b/_includes/2005-giljade.c.inc @@ -0,0 +1,49 @@ + #define/**/F/***/for/*A*/ + #define/***/H()f=*E<<4|*\ + E,f=~(f|f<<1|E[3]|E[1]|E\ + [1]<<4|E[2]|E[(2)]<<(1)); + #define/***/I(x,d)F(;s;C\ + ()){s=s^(b=s&s-1^s);F(N[\ + 4]=q=0;q<4;q++)N[q]=E[q]\ + ;N[5]=E-B;N[d]^=+b^(b)x;} + #define/**/o(p,t,i,m,a,l\ +\ +)u=(f&p)i(m) ;s=u&E[3];I(t(m),3)s=(u)a &E[l];I(t(m\ +),l)u=u>>5-m &u;s=u&E[3-l];I(t(m),3-l) s=(u)a&*E;I\ +(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/ +/*c.c;cc/c.c /-c*/;;char*A=0,*_,*R,*Q, D[9999],*r,l +[9999],T=42, M,V=32;long*E,k[9999],B[1 <<+21],*N=B+ +1234567,q=0, h=3,j=2,O,b,f,u,s,c,a,t,e ,d;C(){F(h=N +[3];(B[h]&&+ memcmp(N,B+B[h],16));h=B[ h]+4);B[h]|| +(B[h]=N-B,N= N+6);}main(char*U,int*w[] ){;;F(_=A=D+ +6666,A[fread (A,1,3333,fopen(__FILE__, "r"))]=0;*++ +_;h||(*_=V)) +*_-59|_[1]-* _||(h&&(*_=+ 35),h---2||(_[9]=V));;F(_ +=A;*_;_++)10 -*_&&*_-V&&( *_-92)&&(k[q]=isalnum(l[q +]=*_),q++);M =47;*(E=N-6) =64;E[1]=289;E[2]=270336; +F(E[3]=32782 ;E<N;E=E+6){ H()o(1048560,<<,>>,4,>>4, +1)o(+489335, >>,<<,1,,2)o (978670,<<,>>,1,>>1,2)o(+ +65535,>>,<<, 4,,1)if(8192 &*E){F(N=B;E>B;E=B+E[5])* +N++=E-B;F(;N >B;){h=*(E=B +*--N);H()s=~(E[1]|h|h<<1 +);u=~(E[2]|h |h<<4);r=l;_ =D;d=1;a=2;O=8;F(q=74;q;q +--){F(b=0;b< 72;b++){h=+1 <<(q-1)/14*4+(b-1)/18;j=b + ?(!(b%18)&&u &h)|h&f|(!(q%14)&&s&h)?1: +0:2;if(O<3)O ?j?j-1&&(O-2 &&d--,*R=34,O=2):(*_++=O- +2?l[d]?l[d++ ]:(d=t,O=e=3 ,34):(O=1,34)):j||(*_++=d +<t?l[d++]:(O =1,d=0,34)); else{if(O<6)if(j){j-2|e|| +(_=R,O-4?d-- :M-_[-1]||(_ [-1]=l[d++],O=3));c=0;if( +k[d]&k[d-1]) F(;k[d-1];++ c)d--;!d||((h=l[d])^l[d-1 +])+k[d]||!(+ 40-(h&62)&&h -125)||(c=1,d--);c-1||(c= +2,d--);c&&(_ [-c]=M,_[1-c ]=T,O=4);j-2|e||(*_++=+92 +);}else{h=*_ ++=O-4?O-5?l [d++]:(O=3,M):(O=5,T),(_[ +-1]&&(35-h|| !(a=+1)))||( O=7,*(R=Q=_-(1))=M);}else +{j?O-7||(O=6 +,_[-1]=59):( *_++=a-2?O-6 ?O-7?126&*++ r:(O=8,T):(O +=7,M):(a=0,l [d]-100?(e=1 ,O=0):(e=0,O =3,35)));if( +e==1){F(r=A= l+d;35-*A;++ A)*A-M&&*A-T ||U-1&&(*A=V +);d=d+A-r;if (U-1){*A=0;F (j=2;13499>j &&(sprintf(l +,r+1,j,j,O=j +75,w[1]),j= O,!system(l) ););exit(j<+ +13499);}t=d+ 9;_[-1]=l[++ d];}a-1|+j-2 ||(R-Q<3?(*( +Q<R?R-1:R)=* Q=*R=59):(*R =M,R[-1]=T), a=2);}}j?(*_ +++=j-2?V:10, R):(R=_-1);} }R[-1]=T;*R= M;*_++=10;F( +R=D;putchar( *R)&&_>++R;) ;}}};O-b-f-u -s-c-a-t-e;} \ No newline at end of file diff --git a/_includes/2005-jetro.c.inc b/_includes/2005-jetro.c.inc new file mode 100644 index 0000000..8be8273 --- /dev/null +++ b/_includes/2005-jetro.c.inc @@ -0,0 +1,47 @@ +#include <math.h> +#include <stdlib.h> +#include <string.h> +#include "SDL.h" + +#define X2(a) a a +#define X4(a) a a a a +#define S1(a,b,c) #a".."#b".."#c"." +#define S14(a,b,c) X4(S1(a,b,c)) +#define S2(a) #a"."#a"....." +#define S24(a) X4(S2(a)) +#define S4(a) #a#a#a#a +#define S3(a,b,c) S1(a,b,c)S4(..) +#define SE X4(X4(S4(..))) + +char l[]=SE SE X2(S3(J,H,M)S3(J,H,E)S3(F,E,A)S3(F,E,J)S3(H,E,O)S3(H,E,C)S3(H,F, +x)S3(H,F,L)),b[]=SE X2(S4(j.jv.j.v)S4(f.fr.f.r)S4(e.eq.e.q)S4(h.ht.h.t))SE,*r[3 +]={S14(v,v,q)S14(r,r,m)S14(q,q,l)S14(t,t,o),S24(J)S24(F)S24(E)S24(H),S24(M)S24( +J)S24(H)S24(L)}; + +#define B int +#define C double +#define S static +#define I(a,b,c,d,f,g) a=(f-d)/10.,b=1e-2*(d*(28-g)-f),c=1e-2*(d*f-8*g/3);\ +d+=a,f+=b,g+=c; +S C T;typedef float A;S B D,R,U,p=0;S A F[5][0100000]={{ "{{" }}0},{0}}; + +void AA(void*u,Uint8*_,B L){u=u;while(L>0){B M=p&037777,s=p>>12,u=(s%R)[ +l],J=(s%U)[b],w=0,a=0,n;A v,q,m,E=(0x2000-(p&017777))/8192e0f;v=q=0; +#define EF_(x) F[w][1638##x+M +#define EF(l,s,ms) ((s*ms+EF_(4)-l]*(1-ms))/2.f+EF_(3)]/2.f) +#define FQ(s) (A)sin((0.12*pow(2,n/12.))*p*s) +#define IZ(v,c) v*=v c?v:0; +#define BF F[w][M]=F[w][M+16384]=q;v+=q;++w +#define IP(n,x,y,z,c) if(n!=46){x}q=EF(y,q,z);c;BF; +#define IS(s,c) if(q c s 0.75f)q=s 0.75f; +#define NQ(x,a,m) n=x-(x>=97?121:65)+a;q=FQ(m); +IP(u,NQ(u,12,1)m=FQ(1.01f);IZ(q,>6e-1)IZ(m,>6e-1)q+=m;q*=5e-1f*(E+1);,12288, +0.2f,;)for(;a<3;++a){char sn=(s%D)[a[r]];q=0;IP(sn,NQ(sn,12,0.25f)IZ(q,<0.3), +12288,0.2f,;)}q=0;IP(J,NQ(J,0,1/8.f)X4(q*=q;)q=(A)fmod(q*20,4)*4;,6144,0.25f,IS +(-,<)IS(+,>)q*=E)v*=0.6f;*(Sint16*)_=(Sint16)(v*32767);_++,++_,++p,--L,L--;}} + +B main(B c,char**a){SDL_AudioSpec f,d;c=c,a=a;D=strlen((!!c&24)[r]),R=strlen(l) +,U=strlen(b);if(SDL_Init(16)<0)exit(1);atexit(SDL_Quit);f.freq=22050,f.format=\ +AUDIO_S16,f.channels=1,f.samples=4096,f.callback=AA,f.userdata=0;if(SDL_OpenAu\ +dio(&f,&d)<0)exit(2);T=0;SDL_PauseAudio(0);getchar();SDL_CloseAu\ +dio();return 0;} \ No newline at end of file diff --git a/_includes/2005-klausler.c.inc b/_includes/2005-klausler.c.inc new file mode 100644 index 0000000..b67c616 --- /dev/null +++ b/_includes/2005-klausler.c.inc @@ -0,0 +1,14 @@ +typedef unsigned char B;char*x[]={ +#include "dict.h" +0};typedef struct L{B*s;struct L*n;}L; +L*h[128],*l[128],*s[128],Z[sizeof x/sizeof*x],*F=Z;int c[256],m,a=1; +int k(B*q){int g=0;B*p=q;while(*p)g|=!c[*p++]--;return g-1&p-q;} +void u(B*p){while(*p)c[*p++]++;} +void S(int N,int r,int t,L*W){L*w;int i,n; + for(n=r<N?r:N;n>0;n--)for(w=n==N?W:h[n];s[t]=w;u(w->s),w=w->n)if(k(w->s)) + if(n==r){if(t==m-1)for(i=a=0;i<=t;i++)printf("%s%c",s[i]->s,i<t?' ':'\n');} + else if(t<m-1)S(n,r-n,t+1,s[t]=w);} +int main(int C,B**A){int i=0,g,n=0;B*p;while(--C)for(p=*++A;n<127&&*p;)c[*p++]++,n++; + for(;p=x[i++];u(p))if(g=k(p))(l[g]=*(l[g]?&l[g]->n:&h[g])=F++)->s=p; + while(++m<128)S(127,n,0,h[127]); + return a;} \ No newline at end of file diff --git a/_includes/2005-mikeash.c.inc b/_includes/2005-mikeash.c.inc new file mode 100644 index 0000000..584ed69 --- /dev/null +++ b/_includes/2005-mikeash.c.inc @@ -0,0 +1,22 @@ +;typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int i +;int A(void){return C=getchar();}int B(m s){return strlen(s) +;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n') +;if(C<0) return 0;i=0;if(C==';'){for +(defvar q= +";typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int iY;int A(void){return C=getchar();}int B(m s){return strlen(s)Y;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n')Y;if(C<0) return 0;i=0;if(C==';'){forY(defvar q=Y~sY;C!='\n';A()Y);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=CY;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n')Y;b[i] = 0;return b;}typedef defvar*format;m E(void){Y;m a=R();if(!a) return 0;if(*a==34)return aY;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return wY;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return wY;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37Y;m s=E();s[B(s)+1]=0;s[B(s)]=34;printf(f+1,s);R()Y;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;forY(format t ;*a;a++)*a=*a==o?p:*aY;R();return r;}else if(*a=='c'){c[0]=*E()-32/*Y(substitute #\Newline (char-upcase #\y ) q= )q= );*/Y;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E())Y;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return cY;}}return a;}int main(void){while(C+1)E();return 0;}Y" +;C!='\n';A() +);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C +;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n') +;b[i] = 0;return b;}typedef defvar*format;m E(void){ +;m a=R();if(!a) return 0;if(*a==34)return a +;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return w +;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return w +;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37 +;m s=E();s[B(s)+1]=0;s[B(s)]=34;printf(f+1,s);R() +;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;for +(format t ;*a;a++)*a=*a==o?p:*a +;R();return r;}else if(*a=='c'){c[0]=*E()-32/* +(substitute #\Newline (char-upcase #\y ) q= )q= );*/ +;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E()) +;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return c +;}}return a;}int main(void){while(C+1)E();return 0;} \ No newline at end of file diff --git a/_includes/2005-mikeash.patch.inc b/_includes/2005-mikeash.patch.inc new file mode 100644 index 0000000..c98fc98 --- /dev/null +++ b/_includes/2005-mikeash.patch.inc @@ -0,0 +1,35 @@ +--- mikeash.c ++++ mikeash.c +@@ -1,18 +1,29 @@ ++;/* ++#| ++*/ ++#define _DEFAULT_SOURCE ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#include <ctype.h> ++/* ++|# ++;*/ + ;typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int i + ;int A(void){return C=getchar();}int B(m s){return strlen(s) + ;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n') + ;if(C<0) return 0;i=0;if(C==';'){for + (defvar q= +-";typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int iY;int A(void){return C=getchar();}int B(m s){return strlen(s)Y;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n')Y;if(C<0) return 0;i=0;if(C==';'){forY(defvar q=Y~sY;C!='\n';A()Y);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=CY;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n')Y;b[i] = 0;return b;}typedef defvar*format;m E(void){Y;m a=R();if(!a) return 0;if(*a==34)return aY;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return wY;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return wY;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37Y;m s=E();s[B(s)+1]=0;s[B(s)]=34;printf(f+1,s);R()Y;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;forY(format t ;*a;a++)*a=*a==o?p:*aY;R();return r;}else if(*a=='c'){c[0]=*E()-32/*Y(substitute #\Newline (char-upcase #\y ) q= )q= );*/Y;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E())Y;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return cY;}}return a;}int main(void){while(C+1)E();return 0;}Y" ++";/*Y#|Y*/Y#define _DEFAULT_SOURCEY#include <stdio.h>Y#include <stdlib.h>Y#include <string.h>Y#include <ctype.h>Y/*Y|#Y;*/Y;typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int iY;int A(void){return C=getchar();}int B(m s){return strlen(s)Y;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\\n')Y;if(C<0) return 0;i=0;if(C==';'){forY(defvar q=Y~sY;C!='\\n';A()Y);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C,i-=(b[i-2]==92&&C==92)Y;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\\n')Y;b[i] = 0;return b;}typedef defvar*format;m E(void){Y;m a=R();if(!a) return 0;if(*a==34)return aY;if(*a=='#'){c[0]=a[2]=='N'?'\\n':a[2];return c;}if(*a=='q')return wY;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return wY;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37Y;m s=E();char S[2048],*P=S,*p=s;for(;*p;p++){*P++=*p;*p==92&&(*P++=92);};*P++=34;*P=0;printf(f+1,S);R()Y;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;forY(format t ;*a;a++)*a=*a==o?p:*aY;R();return r;}else if(*a=='c'){c[0]=*E()-32/*Y(substitute #\\Newline (char-upcase #\\y ) q= )q= );*/Y;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E())Y;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return cY;}}return a;}int main(void){while(C+1)E();return 0;}Y" + ;C!='\n';A() +-);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C ++);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C,i-=(b[i-2]==92&&C==92) + ;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n') + ;b[i] = 0;return b;}typedef defvar*format;m E(void){ + ;m a=R();if(!a) return 0;if(*a==34)return a + ;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return w + ;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return w + ;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37 +-;m s=E();s[B(s)+1]=0;s[B(s)]=34;printf(f+1,s);R() ++;m s=E();char S[2048],*P=S,*p=s;for(;*p;p++){*P++=*p;*p==92&&(*P++=92);};*P++=34;*P=0;printf(f+1,S);R() + ;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;for + (format t ;*a;a++)*a=*a==o?p:*a + ;R();return r;}else if(*a=='c'){c[0]=*E()-32/* \ No newline at end of file diff --git a/_includes/2005-mynx.c.inc b/_includes/2005-mynx.c.inc new file mode 100644 index 0000000..757ebc3 --- /dev/null +++ b/_includes/2005-mynx.c.inc @@ -0,0 +1,221 @@ +#define I int +#define c char * +#define G fscanf(f, +#define W while( +#define k return +#define Q if( +#define Z 512 +#include <errno.h> +#include <stdio.h> +#include <stdarg.h> +#include <string.h> +#include <netdb.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <sys/ioctl.h> +FILE *f; +short w[4] = { 24, 80 }; +I L, B, r, H; +c l[Z], b[Z], s[Z], S[Z][10], T[Z], h[Z]; +I +e(c s) +{ + I n = 0; + Q *s == '#') + k (I) strtol(s+1, 0, 0); + W n < Z) { + Q *S[n] && !strcmp(s, S[n]+1)) + k *S[n]; + n++; + } + k '?'; +} +void +P(I x) +{ + Q x == '\n' || w[1] - 3 < B) { + b[B] = 0; + b[B+1] = 0; + B = printf("%s", b); + B = snprintf( + b, Z, + "\n %s", + b + B + 1 + ); + r++; + } + Q b[B-1] != ' ' || !isspace(x)) { + b[B++] = isspace(x) ? ' ' : x; + Q w[1] - 3 < B) + *strrchr(b, ' ') = 0; + } +} +void +p(c t, ...) +{ + va_list x; + va_start(x, t); + vsnprintf(s, Z, t, x); + t = s; + W *t) + P(*t++); + va_end(x); +} +I +X(c s) +{ + I x; + c t = s; + long m = ftell(f); + W *t && (x = fgetc(f)) != EOF) { + Q *t == '*') + s = t++; + Q tolower(x) != *t) { + Q *s != '*') + break; + t = s; + } + t++; + } + Q *t) + fseek(f, m, SEEK_SET); + k !*t; +} +void +d(c s) +{ + Q 4 < B) + P('\n'); + P('\n'); + Q *s == 'h') + B = 1; +} +void +a(c s) +{ + *T = 0; + G + ungetc(fgetc(f), f) == '"' + ? "\"%511[^\"]" + : "'%511[^']", + T + ); + Q *s == 'a' || *s == 'f' || s[1] == 'f') { + free(l[++L]); + l[L] = strdup(T); + p(" [%d] ", L); + } + Q *s != 'a') + p("%s%s\n", T, *s == 'b' || s[1] == 'h' ? "" : "\n"); + X("*>"); +} +void *Y[] = { + "!--*-->" , 0 , + "a *href=" , a , + "ifr*src=" , a , + "fra*src=" , a , + "img*src=" , a , + "p*>" , d , + "bl*>" , d , + "br" , a , + "hr" , a , + "h*>" , d , + "/h" , a , + "/tr" , a , + "/dt" , a , + "/dd" , a , + "li*>" , d , + "*>" , 0 , + 0 , 0 +}; +I +main(I V, c *v) +{ + I x, n = 0; + c t = v[1]; + ioctl(0, TIOCGWINSZ, w); + f = fopen("entities.txt", "r"); + Q f) { + W G "%s %d", S[n]+1, &x) == 2) + *S[n++] = x; + fclose(f); + n = 0; + } + W t) { + I m = 0; + struct hostent *y; + struct sockaddr_in A; + L = 0; + B = 1; + Q !sscanf(t, "http://%255[^/]%n", h, &n) && !*h) { + Q !(f = fopen(t, "rb"))) + k 1; + goto e; + } + Q 0 < sscanf(h, "%*[^:]%n:%d", &x, &H)) + h[x] = 0; + else + H = 80; + y = gethostbyname(h); + Q !y) + k 1; + memcpy(&A.sin_addr.s_addr, y->h_addr, y->h_length); + A.sin_port = htons( (short) H); + A.sin_family = y->h_addrtype; + f = tmpfile(); + Q !f) + k 1; + W + connect( + m = socket( + A.sin_family, SOCK_STREAM, 0 + ), (void *) &A, sizeof A + ) + || errno == EINTR + ) + ; + n = snprintf( + b, Z, + "GET %s%s HTTP/1.0\r\nHost: %s:%d\r\n\r\n", + t[n] == '/' ? "" : "/", t+n, h, H + ); + Q send(m, b, n, 0) == n) { + W 0 < (n = recv(m, b, Z, 0))) + fwrite(b, 1, n, f); + } + close(m); + rewind(f); + X("*\r\n\r\n"); +e: + r = 3; + *b = ' '; + W r < *w && (x = fgetc(f)) != EOF) { + Q x == '<') { + void **p = Y; + W *p) { + Q X(*p)) { + Q p[1]) + (* (void (*)(c )) + p[1])(*p); + break; + } + p += 2; + } + } else { + Q x == '&') { + G "%9[^;];", T); + x = e(T); + } + P(isspace(x) ? ' ' : x); + } + } + printf("\n? "); + fflush(stdout); + fgets(T, Z, stdin); + Q *T == '\n') + goto e; + t = l[strtol(T, 0, 0)]; + fclose(f); + } + k 0; +} \ No newline at end of file diff --git a/_includes/2005-persano.c.inc b/_includes/2005-persano.c.inc new file mode 100644 index 0000000..8988a9d --- /dev/null +++ b/_includes/2005-persano.c.inc @@ -0,0 +1,138 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> + +#define H 20 + +#define X for +#define F(v,b) X(k = 0; k < 3; k++) v[k] = b; + +typedef double R, V[3], U[4], (*J)(R); +typedef void Z; +typedef int _; + +V o, d, v; +R (*q)[H][6], C[4*H][H][6], sr = 15, br = 25, A, s, t; +_ P, Q, g, S, k, e = 256, (*u)(_) = putchar, D[64]; +J f = cos, Y = sin; +char B[256]; + +Z +T(_ *p, _ k, _ n) +{ + _ g; + + *p = n; + + X(g = 0; k && g < 4; g++) + T(p + (9 & (g * 4|g))*(1<<k - 1), k - 1, + n + (1<<6-2 * k)*(4 - g&3)); +} + +Z +O(_ c) +{ + B[++S] = c, + + (S > e-2 || c==129) && (*B = S, S = fwrite(B, S+1, 1, stdout) - 1); +} + + + + + + + Z N + (R*v){R w=sqrt + (*v**v +1[v]*v[1] + +v[2]*2[v]);F(v,v[k] + /w)}Z K(_ j){V + n,p ;R*b=(* + q) [j],w=f + (A),x= + Y(A); + F(p, + br*o[ + k]+sr + * (n[ k] =f(t)*k[v]+ + Y(t)*(v[(k+1)%3]* d[( k+2)%3]-v[(k+2)% + 3]*d[(k+1)%3])))*b++=p[1 ]+e/ 2,*b++=-*p*x+ + p[2]*w-e*e,*b++=(*p*w+p[2]*x)+e/2;F( b,fabs(*n + *!!k+n[1]*( k<2)+n[2])/sqrt(2+ !(k-1))) + }Z M(R*a,_ s,Z(*m)(_)){_ i;R d= + pow(25/log (36),4)/s/ 377;X( + *a=i=0;i<s ;i++,*a+=d )m(i); + }Z G(_ i ){R w=-Y (P*s), + x=f(P*s), y=Y(Q*s ),z=f + (Q*s);F( v,k[o] =(k<2 + )*(x+3)*( k?y:z) -!(k-2 )*w)N( + v);F(d,P* (k?k- 1?x:w*y:w*z )+Q*(k? + k-1?0:*o:- o[1]) )N(d),w=*d**v+d[1] + *v[1]+d[2] *v[2 ];F(v,k[v]-w + *d[k])N(v),q =&C[ + i],M(&t,H,K); }Z W + (char*s){*s&&( W(s + +1),u(*s-98*(*s> + 97)));}Z E(_ z){R + *r,*a,*b;U*q,l,x,d + ,I[256];_ i,j,m,c,y, + w,h,Y=sizeof l;fputc( + 46,stderr),M(&s,4*H,G), + W("ibcbcbbbbb,"),g=130, + O(e/2);X(y=0;y<e;y++){X(i + =e;i;)*(I[--i])=0;X(;i<4 + *H*H;i++)X(*l=k=0;k-5;k++ + ,a=b)if(b=C[(i/H+((k^k/ + 2)&1))%(4*H)][(i+(k/2&1 + ))%H],k&&y<*a^y<*b){X( + h=0;h<4;h++)h[x]=a[h + +2]+(b[h+2]-a[h+2]) + *(y-*a)/(*b-*a),h? + *l&&(d[h]=(l[h] + -h [x])/w):(w=1+ + fabs (*l-(*x=(_)*x) + ) ); X(q=I+(_)*x; + *l&& w--;q+=2*( + *x<* l)-1)X(**q + >C[i /H][i%H][1 + ]&&( memcpy(*q, + x,Y),* *q=C[i/H][ + i%H][1 ]),h=1;h< + 4;h++)x [h]+=h[d]; + memcpy(l ,x,Y);}X( + i=0;i<e;i++ ,O(*r?c: + 127),g=g<e-1 ?g+1:(O(e/ + 2),130))X(r=&I[ i][3],c=0,j + =2;j+1;j--,r--)k=3|!( j-1)*4,m=*r*k+ + (63*( *r*k-(_)(*r*k))>D[(y*8&56)+(i&7) + ]), c<<=k/4+2,c|=(m|-(m>k))& + k;} O(129);u(0);}_ + + + +main(_ c, char **v) +{ + if (c < 3) + return fprintf(stderr, "Usage: %s P Q [F]\n", *v), 1; + + P = atoi(v[1]), + Q = atoi(v[2]), + + T(D, 3, 0); + + W("bb\346cbcba98FIG"); + + X(; k < 384; k++) + u(k / 3<<("gdb"[k%3] - 97) | 31 | (k % 3!=1)<<5); + + W("bbbce0.2EPACSTEN\x0b\xff!"), + + M(&A, c > 3 ? atoi(v[3]) : 40, E), + + u(59); + + return 0; +} + +/* vi:set ts=8: */ \ No newline at end of file diff --git a/_includes/2005-sykes.c.inc b/_includes/2005-sykes.c.inc new file mode 100644 index 0000000..4cfd886 --- /dev/null +++ b/_includes/2005-sykes.c.inc @@ -0,0 +1,66 @@ +#include <stdio.h> +#include <string.h> +#include <curses.h> +#define P *p +#define E (s?s-1?s-2? +#define T (s=fgetc(g)) +#define _ m[n& +#define L R( +#define b ):L +#define G ):( +#define r =t& +#define F _++k+O] +#define W t--?t--? +#define Y _ k--+O]= +#define M W W W W W W W +#define J *E&D:&V:&I:&C) +#define q C|Z|I|D|B|V|S|32 +#define H E Z:C:V:S)&&(d+=P&l?P-O:P) +#define U(z,w)(t=w,d+=z,_ t]+_ t+1]*O) +int d,C,Z,I,D,B,V,S,i=49152 +,t,s,o,h,z,O=256,n=65535,l=128,f=255,e,w; unsigned char*p,m[65536],a,x,y,k,*u, +*j=" ./ p/ 7 ] . 6 6 p t7 r(0)1*+2,4WgcovGn^f_NVO>F?T\\swldiHZYI9QJ" +"RCKSL[b<D8AP:;a@`BXq3j=- HZYI9QJRCKSL[b<D8AP:;a@`BX 57 ; ; ; ; " +" ; " +" )< <% ><% <% '< <% +< <% 7$ ($A @$A " +"($A &$ $A *$ $A C2 2; =2; 62; '2 2; +2 2; D# #B ?#B 6#B &# #B " +"*# #B F HFG 1 L HFG 'F HFG NFM F :89 :89 J8I :89 &8 :89 +8K :89 ., " +".,/ 5,0 .,/ ', ,/ +, ,/ -E -E3 4E -E3 &E E3 *E E3 2133024425660788" +; R(x){ Z=x?0:2; S=x&l; } K(x){ R(x-P); C=x<P?0:1; } A(){ R(t=F); C r 1; Z r 2 +; I r 4; D r 8; B r 16; V r 64; } X( ){ Y d/O; Y d; } N( ){ X( ); Y q; I=4; d= + + U(0,n-1); } main(int c,char*v[]) + { FILE*g ; _ z]=time(0); g=fopen( + c>1?v[1]:"", j+32); t=i; if(g) { ; + for(; T+1; + _ t++ ]=s); + w r /* ### COMMODORE BASIC ### */n ; + d=w?i: U(C, n + -3); /* READY. */z=c> + 2?atoi( v[2])+1 + :4; c=z ? n * z + / 4 : n; nodelay( + initscr( ), 1 ) ; + curs_set(I); cbreak(); noecho( ) ; for (; ; + ) { o++ % ( c *4) ?h :( h= getch () ,h-ERR?(_ + 162]=h|l):0); if(!w){ s=(_ 59408] + |=z?l:0)&15; _ 59410]=~(h-ERR?(s^8?0:j[h|l]&1)|(j[h]/8 + -5-s?0:1<<j[h]%8):0); } o%c|I||N(); p=m +O+O+ _ l-9]; t + =d%65493; i=_ d++]; if(w+t<4){ if(P&&(u=strchr(++p,34))) + { *u=0; _ l-9]=u-m+1; if(g=fopen(p,t?j+61:j+32)){ i=1025 + -t; if(!t){ T; for(T; T+1; _ i++]=s); for(p=m+42; p<m+47 ; + ){ P++=i%O; P++=i/O; } } for(; t; fputc(_ i],g))t=_++i]?3:t + -1; fclose(g); } } i=96; } t=j[i/2&14|i&1|O+O]&15; e=W W W W + U(2,d)+(i-190?x:y):U(2,d)+y:f&_ d++]+(i-150&&i-182?x:y):U(1,_ d + ])+y:U(2,d):_ d++]:d++:U(1, _ d ] + x & f ):&a - m; p=e + +m; s=i>>6; t=j[i+O]-35; M M M W 0 : L a = y G k = x G L + a=x)G L x = k ) G L y=a)G L x = a ) G P =y G P = x G P + =a G t=a-P-1+C,C r O?0:1,V=((a^ P ) & ( a ^ t )&l)/2 , L a r + f)G d=F,d+=F*O+1 G A(),d=F,d|=F*O G t=P,L P=P/2|C*l),C r 1 G t=P,L P=P*2| + C),C=t/l):A(b a=F G Y q G Y a G L a|=P)G C=P&1,L P/=2)G L y=P)b x=P b a=P G + s=U(1,--d),X(),d=s G d=i&32?U(0,e):e b++y b++x b++P b a^=P b--y b--x b--P): + K(y):K(x):K(a G J=0 G J=E 8:8:4:1)G d--,B=16,N() G L a&P),V=P&64 + ,S=P&l):!H:H:(C=P/l,L P*=2)b a&=P G t=a+P+C,C r O?1:0,V=(~(a^P)& + +(a^t)&l)/2,L a r f)); t=e^O*O/2; if(t<1000){ s=P%l; i=A_REVERSE; P>s?attron(i) +:attroff(i); mvaddch(t/40,t%40,s+w<32?s+64:s>95+w?s-32:s); } } } perror(*v); } \ No newline at end of file diff --git a/_includes/2005-timwi.c.inc b/_includes/2005-timwi.c.inc new file mode 100644 index 0000000..e8ad5fa --- /dev/null +++ b/_includes/2005-timwi.c.inc @@ -0,0 +1,26 @@ +#include <stdio.h> +#define _ main( +#define _l ___l ___l ___l ___l ___) +#define __l int +#define ___l ___)*( +#define ____l (_l], +#define ____ 1 +#define ___ __+_____ +#define __ ____+____ +#define _____ __+____ +#define ______1 *(l__ +#define _____1 *__1%(__ +#define ____1 )?( +#define ___1 _1&(__ +__l __I[____l _I[____l*l__=_I,*l_=__I;__l _ __l _1,__l*__1){__l _l_; +return ___1+ __ ____1 ___1 ____1*__1 = getchar()):__ ____1*__1<____? +____:_____1+___ ____1 _____1+_____ ____1 _____1+____)____1 ___1+___+ +____ ____1 _____1 +__)____1 _____1 )____1 *l__)++:_____1+____)-____? +______1 ++) :_____1+_____) -____?__:printf("%d\n",*l__):_____1+____+ +___ ____1 *l__) =*(l_++ ):__:___l ____- ____):_____1 +_____)-3?__-2: +____:(___1+____+___ ____1 _____1)____1*l__)-- :_____1+__)?__:______1 +--):___l 0))?__:_ _1,__1+____)+____:(___1+____+___ )) &&* l__?_ ___1 ++___+___+__),__1+____)?_ ___1+11 )|(___1)?____:__- 2),__1):____-1 :( +_l_=_ ___1 -____+___l ____),__1+____ )) ?_l_+_ ___1 )?_1 :___1+10)|( +___1-____ ____1 __):0),__1+_l_):0):__:_1%(__ ____1 _1/(__)) ?_ scanf +("%i",__1 ____1 _____):(___l _____)-____,__1 +____):_ _____,l_):__;} \ No newline at end of file diff --git a/_includes/2005-toledo.c.inc b/_includes/2005-toledo.c.inc new file mode 100644 index 0000000..43a41bc --- /dev/null +++ b/_includes/2005-toledo.c.inc @@ -0,0 +1,64 @@ +#define F getchar()) + #define H(z)*n++=z; + #include <setjmp.h> + #define v main(0,0,0 + #define Z while( + #define _ if( +#define o(d) (u[l]=0,l[d]=6^e,q=1e4>v,0),l[d]=0,u[l]=e^6,q) +#define I(H,n) { _ r=l[x=H],!r|(r^e)<-1){ _ j=u[l],-7==r|6==r\ +){ n; e=~e; return 1e5- f; } u[l]=0,t=j+1,i=j-1; _!i&89<x)i\ +=j,t=6; _-1==t&30>x)t=j,i=-7; Z++i<t){ b=S; d=0; S&=63; \ +a=((j^e)!=1?6!=(j^e)?O[32+x/10]-O[u/10+32]-q:(S|=6!=j?8\ +:1,2==u-x)*9+9*(x-u==2):(d=1==j?x-u:u-x)/8+!(!((x-u)%\ +10)|r)*99+(j==1?90<x:29>x)*(9*O[28+i]-288))+O[r+28\ +]*9-288+O[x%10+33]-f-O[33+u%10]; x[l]=i; S|=(21=\ +=u|21==x)*2+(u==28|28==x)*4+(91==u|x==91)*16+32\ +*(u==98|x==98)+(20==d)*64*x; a-=k>f?main(a,f+1\ +,M,k):0; _ i==c&u==h&!f&N&a>-1e4&x==y)longjm\ +p(z,1); S=b; _!N|f&&(a>M||!f&a==M&&1&rand()\ +)){ _!f){ _ k){ c=i; h=u; y=x; } } else _ \ +L-a<N){ n; e=~e; u[l]=j; x[l]=r; return\ + a; } M=a; } } x[l]=r; u[l]=j; n; } } +typedef int G; char J [ 78 ], O [ ] += "HRQAMS#-smaqrh[UTZYTU[|TBA(" +"$#(ABT|ba`gg`ab8>GK[_`fFDZXEYR" "L\t####" +"##B#A#@#G#F#E#D#K\t\3Zlv#tjm" "\3J#tjm\3Pwb" +"ofnbwf\3Joofdbo\3)&`&`.&`&`" "#+&g*\t"; G y, +c,h,e,S,*s,l[149]; jmp_buf z ; G main(G L,G f, +G N,G k){ G u=99,p,q,r,j,i,x ,t, a, b,d,M=-1e9 +; char *n; if( *l){ e=~e; Z u >21){ q= l[--u]^e; +_!-- q){ _!l[p=e?u-10:u+10]){ I(p,)_ e?u>80 & !l[p +-=10]:u<39&!l[p+=10])I(p,)} _ l[p=e?u-11:9+u] )I(p,) +else _ u-1==S>>6){ l[u-1]=0; I(p,l[u-1]=-2^e); } _ l[ +p=e?u-9:11+u])I(p,)else _ S>>6==1+u){ l[1+u]=0; I(p,l +[1+u]=e^-2); } } _!--q){ n=O+41; Z++n<50+O)I(u+80-*n, +)} _ 0<q&4>q){ n=q==2?53+O:O+49; Z++n<O+(q!=1)*4+54 +){ p=u; do I(p-=*n-80,)Z!p[l]); } } _ 4==q){ n=49+O + ; Z++n<O+58)I(u-*n+80,)_ e&!(S&24)|!e&!(S&3)&&k&& + !l[u-2]&!l[u-1]&!l[u-3]&&o(u)&o(u-1)){ l[u-1]= 4 + ^e; l[u-4]=0; I(u-2,l[u-1]=0; l[u-4]=e^4); } _ + e&!(S&40)|!e&!(S&5)&&k&&!l[u+1]&!l[2+u]&&o(u)& + o(1+u)){ l[u+1]=e^4; l[3+u]=0; I(u+2,l[1+u + ]=0; l[u+3]=4^e); } } } e=~e; return M; } + Z h<130){l[h]=-(21>h|98<h|2 >(h+1 )% + 10); O[h++]^=3; } n=O +14; s=20+l; Z + ++s<29+l){ 10[s]=1; 70[s]=~ ( * s = * + n++ -+84); 60 [ s] =-2; } Z n=J){ puts + (58+O); u=19; Z++u<100){ H(32)_!( u%10 + ))H(32)H(O[7+l[u]])_(9+u)%10>7){ H(58 + -u/10)H(32)_ u&1)puts(n=J); } } puts + (O+58); _-1e4 >v , 1)){ e=~e; puts + (O+(v,0)> 1e4?e?90:82:96)); break + ; } _ 1<L&e) { d=v,2+L); printf + (O+114,h%10+64,58-h/10,y%10+64 + ,58 -y/10,d); } else{ putchar + (62 ) ; h= (95 & F-44; c=l[h + +=(56-F *10]; y=(95&F-44; y + +=(56-F*10; Z 10!=(u=(95 + &F)){ c=5; Z--c>1&&u!=c + [O]); c=e^c-7; } } _! + setjmp(z)){ v+1,1); + puts( 106+ + O); } } Z + 10!= + F; } \ No newline at end of file diff --git a/_includes/2005-vik.c.inc b/_includes/2005-vik.c.inc new file mode 100644 index 0000000..10c12c9 --- /dev/null +++ b/_includes/2005-vik.c.inc @@ -0,0 +1,109 @@ +#include<math.h> +#include<stdio.h> +#include<stdlib.h> +#include<sys/time.h> +#include<X11/Xlib.h> +#include<X11/keysym.h> +Window L; +GC N; +Display *K; +XEvent O; +XImage *Q; +float w, x, y[7 << 16]; +struct timeval S, U; +int a, b, c, d = + 92, e, f, g, h, i, j, k, l, m, n, o, p, *q[96], r[7 << 16], s[96], *t, + *u = r, *v, P = 256, R[64], T, J = 12288; +struct +{ + int a, b, c, d, e; +} A[9999], *B, *G, *H; +unsigned char C, D[9999], *E = D, F[] = " .bmp"; +FILE *I; + +#define Q(o,X,Y,C)B->b=b+32*o,B->c=c+32*X,B->d=Y,B->e=C,B++->a=l, +#define D(o,X)(int)((X*(B->b-e)-o*(B->c-f))/(x*B->e-w*B->d)) + +int +main (int X, char **Y) +{ + for (j = J << 8, x = y[i], w = y[i + 32], B = A; k = D (x, w), B->b; + k >> 8 ? 0 : (l = D (B->d, B->e), l > 0 + && l < j) ? j = l, h = k, g = B->a : 0, B++); + for (; + X + && (p = + 1 | 3 * (o = (--X < 2 || 119 - 1[Y[1]] ? 320 : atoi (2[Y]))) / 4);) + { + for (e = f = J / 2, K = XOpenDisplay (0); m < o << 8; + y[m] = + sin ((m & 255) / 20.4 + asin ((m / P - o / 2) / 3.2 / o)), + D[m & 511] = 10 + d * !(1 & (m >> 3 & m)), r[m++] = + m / 18 << (16 & (m >> 6 ^ m))); + for (N = + XCreateGC (K, L = + XCreateSimpleWindow (K, RootWindow (K, 0), 0, 0, o, p, + 0, 0, 0), 0, 0), ((I = + fopen (X ? + Y[X] + : "", + "r")) ? + fread (E + 1, + 1, + 1 << 15, + I), + fclose (I) : + 0), B = G = + A + J / 3; *++E; f = l == 32 ? e = b + 99, c + 99 : f) + for (l = *E - 10, *F = *E, k = !l, b *= !k, c += P * k, b += P; + l > 54 && l < 96 + && (Q (0, 0, 1, 0) Q (8, 0, 0, 1) Q (8, 8, -1, 0) + Q (0, 8, 0, -1) + ! q[l] && (s[l] = 1, q[l] = u, I = fopen (F, "r"))); l = J) + for (q[l] = ++u + 19, m = 2; + n = (m++ % 3 ? n : 0 ** ++u) >> 8 | C << 16, *u = + n, 0 < fread (&C, 1, 1, I) + || (m /= J, s[l] = m ? m : 1) * fclose (I);); + for (XMapWindow (K, L), + XSelectInput (K, L, KeyPressMask | KeyReleaseMask), H = A; G->b; + *H = *G++, H += !B->b) + for (B = A + J / 3; + B->b && !(B != G && B->b == G->b - 128 * (B->d - G->d) + && B->c == G->c - 128 * (B->e - G->e)); B++); + for (Q = + XCreateImage (K, DefaultVisual (K, 0), DefaultDepth (K, 0), + ZPixmap, 0, (char *) (v = + malloc (4 * o * p)), o, p, + 32, 0); + d = (d + R[19] - R[17]) & 127, n = R[18] - R[20], n ? (i = + o * 128 + + d + (n < + 0) * + 64, main (0, + Y) + > + 200) ? e += + (int) (y[i] * 64), f += (int) (y[i + 32] * 64) : 1 : 1; + XSync (K, 0), gettimeofday (&S, 0), m = T - S.tv_usec) + { + for (T -= + (m > 0 + && m < J * 4 ? U.tv_usec = + m, select (0, 0, 0, 0, &U) : m) - 4 * J, a = + a + 1 & -1 >> 1, m = 0; + k = + 1 + + (int) (p * 512 / + ((i = m * P + d, g = n = + 0, main (0, Y)) * y[m * P + 32])), m < o; m++) + for (t = g ? c = + 64 * s[g], q[g] + h / 4 + 64 * (a / 3 % s[g]) : t; + l = 32 - (17 << (k < 2)) * (2 * n - p) / k, n < p; + v[m + o * n++] = l >> 6 ? 4477904 << (l < 0) : t[c * l]); + for (XPutImage (K, L, N, Q, 0, 0, 0, 0, o, p); XPending (K); + R[63 & XLookupKeysym (&O.xkey, 0 & XNextEvent (K, &O))] ^= + O.type == KeyPress || O.type == KeyRelease); + } + } + return j; +} \ No newline at end of file diff --git a/_includes/2005-vince.c.inc b/_includes/2005-vince.c.inc new file mode 100644 index 0000000..38557ff --- /dev/null +++ b/_includes/2005-vince.c.inc @@ -0,0 +1,90 @@ +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <GL/glx.h> +#include <GL/glu.h> +#define E(x) { printf("%i\n",x); goto l; } +#define G fgetc(F) +#define H glEnable( +#define I glMaterialfv(GL_FRONT, +#define J glMatrixMode( +#define L (y +#define M 640,480 +#define N NULL +#define O GL_DIFFUSE , i +#define P glCallList(u); +#define T glTexCoord2i +#define U glLightfv(GL_LIGHT0, +#define V R(); glVertex3i(c,m,n); +#define X GL_TEXTURE_2D +#define Z(x) G; x=G; x=x<50-(x==59); + +void Y() +{ { { { { { { { { { { { { { { { + + { { { { { { { { { { { + { { { { { { + { { { { { { { { + { { { { { { + { { { { { ; { } } } } } + + + } } } } } } } + } } } } } } + } } } } } } + } } } } } } + } } } } } } } + +} } } } } } } } } } } } } } } } + +void Q() +{ { ; { { { { { { { { + { { { { { { +{ { { { { { +; { { } } } } } } } } +} ; } } } } } } } } } +} } } } } } + + + + FILE *F; int u,t,l,m,n,x=0,a=0,b[]={ GLX_DOUBLEBUFFER, + GLX_RGBA , GLX_DEPTH_SIZE , 16, None},o,n,c ; void R() { + Z(c); Z(m); Z(n); } int main( int _, char **A) { char f[ + BUFSIZ ] ; GLXContext r ; XVisualInfo * v ; Display *y; + XEvent e ; GLfloat g=0, h=10, i[ ]= { 1,1, 1, 1, 5,5, 100 + ,0, .6, .6, .6 ,1 } ; XSetWindowAttributes s; GLubyte j[1 + <<10] ; Window w; if(! L= XOpenDisplay ( N ) ) ) E(1) ;if + ( ! +glXQueryExtension L , N , N ) ) E (2); v=glXChooseVisual L , +DefaultScreen (y ) , b ) ; s.colormap = XCreateColormap L , +RootWindow (y,v -> screen), v -> visual, AllocNone ); if (!( +r= glXCreateContext L, v, N, 1) ) ) E (3) ; strcpy(f, *A ) ; +s.event_mask=KeyPressMask; strcat(f,".c"); F=fopen(f,"r" ) ; +w= XCreateWindow L, RootWindow( y, v -> screen ), M , M, 0,v +->depth,InputOutput, v->visual , CWColormap|CWEventMask, &s) +;glXMakeCurrent L , w , r ); H GL_DEPTH_TEST ); if ( ! F )E( +4 ) ; glShadeModel ( GL_SMOOTH ) ; while ( a != 89 ) a = G ; +G; G ; glGenTextures( 1, & t ); while ( x< 1024 ) { G; a =G; +j[ x++ ] = 128; j[ x++ ] = 128 & - ( a<33 ); j [ x ]= j[ x-1 +]; x++; j[x++] =-1;} glBindTexture(X,t); glTexParameteri (X, +GL_TEXTURE_MIN_FILTER , GL_NEAREST ) ; glTexImage2D( X ,0, +GL_RGBA, 16 , 16 , 0 , GL_RGBA, GL_UNSIGNED_BYTE , j ) ; J +GL_PROJECTION ) ; gluPerspective( 60 , 1.333 , 1 , 100) ; J +GL_MODELVIEW); u=glGenLists(1); glNewList(u,GL_COMPILE); H X +) ; while ( a != 81 ) a = G ; G ; G ; for (x=0; x<6; x++ ) { +glBegin(GL_QUADS); R(); glNormal3f( c, m,n); T(1,1); V T (1, +0 ) ; V T ( 0 , 0 ) ; V T( 0 , 1 ) ; V glEnd ( ) ; } +glEndList( ) ; XMapWindow L , w ) ; c = 0; for ( ; ; ) { if( +XPending L ) ) { XNextEvent L , &e ) ; if((XLookupKeysym ( ( +XKeyEvent *)&e,0))&1<<5){ h=10; i[c]=!i[c]; c++; c&=3; } else +E(0)} glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ; +glLoadIdentity(); gluLookAt ( -2 ,0 ,5 ,0,0 ,0,0 ,0 ,1 ) ; H +GL_LIGHTING); H GL_LIGHT0 ); U GL_POSITION, i + 4); U O) ; U +GL_SPECULAR,i); glLightModelfv( GL_LIGHT_MODEL_AMBIENT,i +8) +; I GL_AMBIENT, i+8); I O + 8 ) ; glRotatef( g, 1, 1, 1) ; P +glTranslatef(-h,0,0); P usleep (4000); g+=.07*x; if (g>360) +g-=360.0; h-=x /100.0; glFlush(); glXSwapBuffers L ,w);} + +l: +return 0; +} \ No newline at end of file diff --git a/_src/2005/aidan.c b/_src/2005/aidan.c new file mode 100644 index 0000000..bb5438c --- /dev/null +++ b/_src/2005/aidan.c @@ -0,0 +1,74 @@ +#include +#include + +#define N(I,l) s l]=(I?1<>10));\ + } else if((s]>>l0)&1) c[o]=c[o]+1?-2:l;\ + if(*#k) { f(l,81) if(s]>>10||(s]&=c[o]),!s]) Ba(o,k) }\ + else f(l,9) l[c]<0||s[c]]>>10||(N(l0,[c]),C++); + +struct{ int s[81],I,l,O; } S[0123]; +int I, l, l0, o, C, O=0, w=0, c[10], L; long i; +char z[] = "\007 & & \n"; + +#define s S].s[l + +int main(int n,char**N) { + S->O=0; L=n>1?*N[1]-85?1:6:0; i=L&1?atol(N[1]):123; +#define i (int)(81.0*(i=1103515245*i+12345&0x7fffffff)/2147483648.0) + for(l=C=0;l<81;) { + I=L&1?0:getchar()^48; i; I=I-30?I:0; + if(I<10) { + #define S S[O + if(C<22) z[C++]^=13; N(I,)NO + } + } + + for(;;) { + l0: + Su(row,col,box) C=l0=0; + f(l,81) if(!(s]>>10&&++l0)) { + o=s]&1022; for(I=0;~o&1&&(o/=2);I++); o-1||(s]|=I<<10,C++); + } if(l0==l) { + if(O&&L&2) { O--; goto l0; } goto O; + } for(l0=1;10>l0;l0++) { Su(,,) } + + if(!C) { + l=(o=S].O)?S].I:0; I=o?S].l%9+1:(S].O=i%9+1); + for(;l<81;l++,I=S].O,o=0) if(!(s]>>10)) { + for(;;I=I%9+1,o=1) { + l0=0; if(o&&I==S].O) goto O; + if(s]>>I&1) { + S].l=I; S++].I=l; S]=S-1]; + N(I,); O>w&&(w=O); goto lO; + } + } + } + } + lO: S].O=0; goto l0; l: if(!(l0=O)) { L=0; goto O; } O--; + s,S].I] &=~ (1<>10,~s]&1) { + s]=1023; S].I=l; S&0]=S]; w=O=0; L=2; goto lO; + } + L=0; l0=1; + } else { + l=S=82].I; N(S].O,)|1; goto O1; + } + } + + printf("\n\n"); for(l=0;l<81;) {I=s]>>10 NO} + printf("\n%s (stk %i %i)\n",l0?"Done":"No way!",O,w); + L|=2; if(L-3||!l0) return!l0; S,82]=S]; goto O; +} diff --git a/_src/2005/anon.c b/_src/2005/anon.c new file mode 100644 index 0000000..96908d1 --- /dev/null +++ b/_src/2005/anon.c @@ -0,0 +1,178 @@ +#include +#include +#include + + +/* Defines */ + +#ifndef NO_STTY +#define S1 system("stty cbreak -echo")|| +#define S2 system("stty sane")|| +#else +#define S1 +#define S2 +#endif + +#define A(i) (((q*)R(8))[i]) +#define B p(b) +#define C p(&a) +#define H(i) sscanf(A(i),"%ld",&R(i+11))&0 || +#define P q* +#define M(a,b) main((i)(a),(P)(b)) + +#define p(x) ((i*)(x)) +#define D T(B-C,C-B) +#define T(x,y) ((a&1)*((i)(x))+(~a&1)*((i)(y))) +#define R(x) (*(B+x)) +#define q char* +#define Q(x) ((q)(x)) +#define W(x,y) ((B[x]=(i)(y))&0)|| +#define BS (w*l*h) +#define do(x,y) (a-x||y)&& +#define f(x) M(x,b) +#define if(p,q,r,s) ((p)&&!(q)||(s))&&(r)|| +#define i long +#define I (int) + +#define while(x,y,z) do(x, y && !(z) && f(a)) +#define for(s,i,x,y,z,Z) W(i,x)f(s)||Z) && while(s,R(i)-y,z||W(i,R(i)+1)0)(s +#define return return do +#define w R(12) +#define l R(13) +#define h R(14) +#define X(i) (R(i)%w) +#define Y(i) ((R(i)%(w*l))/w) + +#define Z(i) (R(i)/(w*l)) +#define pr !printf +#define switch(x) (W(32+R(15),R(32+x+R(15))) W(32+x+R(15),0) (B[15]+=x)|1) +#define case(k,x,y) R(a)==k && x && switch(y) && f(13)|| +#define TL(i) R(32+R(i)) + + +/* Main program */ + +int main(int a, P b) { + return(1>>1^1, M(6+!!M(5,C),C)) + + do( + 13, + pr("\x1b[;H")|| + + for(14,4,0,BS,!X(4)&&pr( + "%*s", + I(l-Y(4)), + "" + ) + + || + + if(TL(4),pr( + "%*ld",I + R(31), + TL(4)),0, + pr("%*.*s",I + R(31), + I R(31),"#####") + ) + if(X(4)==w-1 , pr("\n"),0 , pr("%*s", I(l+1), "")) ( + (R(4)+1)%(w*l)==0 && l>1)&& + pr("\n"),0)) + do( + 1&~1, + pr("Syntax: %s []\n", b[0])||f(15) + )((a&~1) + + -6||D>>12 + &&(*(p(T(C,b))+8)=*p(Q(b)+(Q(&b)-Q(C))) + ) + + &&(*(p(T(C,b))+9) = *p(b))&&M( + 8,T(C,b)) + || + + f( a) )&&do( + 8, + if(R(9)&1,H(1)H( + 2 ) 0,W(14, + l)W(13,1)0, + H(1 + ) + + H(2) + H(3) + 0)(srand(time(0)),0 + ) ||for(9,4, 0,BS, f(16) + + || W(R(4)+32,R(0))!R(0) && W(15,R(4) )0, + + W( + 31, + snprintf(A(0),1,"%ld",BS)) + S1 pr("\x1b[2J") || + f(13) + || + + f(18) || + f(15) + )) + + do( + 16,W(0,rand()%BS + ) W(1,0) + + for(17, 5, 0,R(4),! ( + TL( + 5)-R(0))&&! ( + W(1,1) + W(5,R(4)-1) + 0),R(1)&&f(16)) + ) + + do( + 18,W(0,0 + ) for(19,4,0,BS, TL(4)-(R(4)+1) + + %BS&& ( + W(0,1) + W(4,BS-1 + ) 0)||0,!R(0) && + + pr( + "You win!\n" + ) + || + R(0)&& ( + W(a,getchar()) + case('i', + 0 + #include + + typedef double n; n *d,*b,*f; typedef unsigned char c; +char _[ ]=" \n<%s %s=\"%d\" %s=\"%d\">\n", q [7][7] = { +"ivory","black","width","height","text"};int v,std(i,scan),std(o,print); + +int cc(str(const void*,x,y)) +{ + rt(*(n*)x>*(n*)y)-(*(n*)x<*(n*)y); + } + n t(n f,n g,str(n*,x,y)) + { + f=*x++-f,g=g-*x,*y=f*f;rt *y+g*g; + } + c*ln(n*p) + { + c*f=((c*)(d+2*(2+v))+2*(p-d)); while(!*f) mx(f,rand(),rand());rt f; + } + n*put(str(n*,f,l),n z) + { + int r=(l-f)/4,p=*(f+(r*=2))0?put(f+p*r,p?l:f+r,z):f; + } + n*g(n u,n w) + { + n y=u/(U-1),*s=put(d,d+v+2,y),z=w/(U-1),k,l=t(y,z,s,&k), + m=l,*r[4],g[4],*f; c p; for(mx(r,s,0),mx(g,k,l); + p=*(1+g)<*g,(m>*(g+1))+(*gu;++u) + i+=*ln(y),j+=*(1+ln(y)),k+=*(ln(y)+2); + *_=i/u,*(1+_)=j/u,*(_+2)=k/u;rt(c*)_; +} + +void tr(n x,n y,n i) +{ + c*h,w;n*m=g(y,i); for(w=4*(x<2);++w<4&&m==g(w/2*x+y,i+w%2*x);); + for(w=4*(w>3&&(h=x>1?ln(m):a(&y,&i))&&o("\n",*h,*(1+h),*(2+h),str(F+, + y,i),vi(x))),x/=2;x>0&&w<4;++w)tr(x,y+w/2*x,w%2*x+i); +} + +int main() +{ + long k,r=1e6,h;d=calloc(r,k=sizeof(n)),f=d+r,b=d; + + while(0<(h=i("%lf",b)))*--f=*b++;v=b-d;if + + (!h+v%2+!v&&(r=0x630C65u)){o("\n0x7");while(r-->0)o("F");rt -1;} + mx((d+v),-r,r);qsort(d,2+(v/=2),2*k,cc); + tr(U,0&o(4+_,"xml","svg",vi(2*F+U)),0); + + for(b=d-1+r,k=0;r=1,v>k++;b-=2) + str(o("<%s x=\"%f\" y=\"%f\" fill=\"%s\" %s-anchor=\"end\">%d\n", + 4+q,str(F+r/2.-5+U**,b,(b-1)),q+r,q+4,k+!o + ("\n", + r+q,str(F+r/4.+U**,b,(b-1))),4+q),&&r--,); + + free(d);rt o("\n")-7; +} diff --git a/_src/2005/chia.c b/_src/2005/chia.c new file mode 100644 index 0000000..6469642 --- /dev/null +++ b/_src/2005/chia.c @@ -0,0 +1,82 @@ +/* + * Sun's Java is often touted as being "portable", even though my code won't + * suddenly become uber-portable if it's in Java. Truth is, Java's one of + * the most ugly, slow, and straitjacketed languages ever. It's popular + * mainly because people hear the word "portable" and go "ewww". + * + * This program, then, is dedicated to bringing about the death of Java. We + * good coders have been oppressed for too long by the lame language + * decisions of pointy-haired bosses and academics who should know better. + * It's time we stand up against this junk, and bring back the fun in + * programming! Viva La Revolution! + */ + +#define aSet c +#define BufferedReader(x)1 +#define byte Y[I][_^1]?do(:):_&1?do(.):do(`):8;++y;} +#define class int N=0,_,O=328,l=192,y=4,Y[80][64]={0},I;struct +#define do(c)a(#c "\b") +#define err c,c +#define getAllStrings(x));q() +#define if(x)b(#x) +#define IOException +#define line c +#define main(a)b(char*x){write(1,"\033[",2),null}main() +#define new +#define null a(x);}a(char*x){write(1,x,strlen(x));try;try;try;try; +#define out c,c +#define println(x)c +#define private int d(int +#define public short c;}c;typedef int BufferedReader;char*F="JF>:>FB;;BII"; +#define return {return +#define static f(x){N=(N+x)%6,y--?f(0),f(1),f(4),f(1):++Y[(I=O+N[F]-66) +#define String +#define System c +#define this if(D):1,O=I,I/=16,l<_/32?if(B):l>_/32?if(A):2,l=_,_/=16,byte +#define throws +#define toArray(x)c +#define try for(;--c.c;) +#define void /16][(_=l+N[6+F]-66)/16]?O/=16,l/=32,OI/16?this +#define while(k)if(2J),if(7;21H),f(0),f(4),f(4),if(H),/* + +import java.io.*; +import java.util.*; + +/** + * A lame Java program. + * @author J. Random Worker + */ +class LameJavaApp +{ + + /** The infamous Long-Winded Signature From Hell. */ + public static void main(String[] args) + throws IOException + { + /* Don't get me started on this. */ + BufferedReader reader = + new BufferedReader(new FileReader(args[0])); + + /* What, this long incantation just to print a string? */ + System.err.println("Hello world!"); + + /* At least this is sane. */ + String line; + while ((line = reader.readLine()) != null) + System.out.println(line.length()); + } + + /** + * Method with a needlessly long name. + * @param aSet a set (!) + */ + private String[] getAllStrings(Set aSet) + { + /* + * This dance is needed even in J2SE 5, which has type + * templates. It was worse before that. + */ + return aSet.toArray(new String[0]); + } + +} diff --git a/_src/2005/giljade.c b/_src/2005/giljade.c new file mode 100644 index 0000000..11a8398 --- /dev/null +++ b/_src/2005/giljade.c @@ -0,0 +1,49 @@ + #define/**/F/***/for/*A*/ + #define/***/H()f=*E<<4|*\ + E,f=~(f|f<<1|E[3]|E[1]|E\ + [1]<<4|E[2]|E[(2)]<<(1)); + #define/***/I(x,d)F(;s;C\ + ()){s=s^(b=s&s-1^s);F(N[\ + 4]=q=0;q<4;q++)N[q]=E[q]\ + ;N[5]=E-B;N[d]^=+b^(b)x;} + #define/**/o(p,t,i,m,a,l\ +\ +)u=(f&p)i(m) ;s=u&E[3];I(t(m),3)s=(u)a &E[l];I(t(m\ +),l)u=u>>5-m &u;s=u&E[3-l];I(t(m),3-l) s=(u)a&*E;I\ +(t(m),(0));; /*echo/Line/%d;sed/-n/-e/ %d,%dp/%s>*/ +/*c.c;cc/c.c /-c*/;;char*A=0,*_,*R,*Q, D[9999],*r,l +[9999],T=42, M,V=32;long*E,k[9999],B[1 <<+21],*N=B+ +1234567,q=0, h=3,j=2,O,b,f,u,s,c,a,t,e ,d;C(){F(h=N +[3];(B[h]&&+ memcmp(N,B+B[h],16));h=B[ h]+4);B[h]|| +(B[h]=N-B,N= N+6);}main(char*U,int*w[] ){;;F(_=A=D+ +6666,A[fread (A,1,3333,fopen(__FILE__, "r"))]=0;*++ +_;h||(*_=V)) +*_-59|_[1]-* _||(h&&(*_=+ 35),h---2||(_[9]=V));;F(_ +=A;*_;_++)10 -*_&&*_-V&&( *_-92)&&(k[q]=isalnum(l[q +]=*_),q++);M =47;*(E=N-6) =64;E[1]=289;E[2]=270336; +F(E[3]=32782 ;E>,4,>>4, +1)o(+489335, >>,<<,1,,2)o (978670,<<,>>,1,>>1,2)o(+ +65535,>>,<<, 4,,1)if(8192 &*E){F(N=B;E>B;E=B+E[5])* +N++=E-B;F(;N >B;){h=*(E=B +*--N);H()s=~(E[1]|h|h<<1 +);u=~(E[2]|h |h<<4);r=l;_ =D;d=1;a=2;O=8;F(q=74;q;q +--){F(b=0;b< 72;b++){h=+1 <<(q-1)/14*4+(b-1)/18;j=b + ?(!(b%18)&&u &h)|h&f|(!(q%14)&&s&h)?1: +0:2;if(O<3)O ?j?j-1&&(O-2 &&d--,*R=34,O=2):(*_++=O- +2?l[d]?l[d++ ]:(d=t,O=e=3 ,34):(O=1,34)):j||(*_++=d +j &&(sprintf(l +,r+1,j,j,O=j +75,w[1]),j= O,!system(l) ););exit(j<+ +13499);}t=d+ 9;_[-1]=l[++ d];}a-1|+j-2 ||(R-Q<3?(*( +Q++R;) ;}}};O-b-f-u -s-c-a-t-e;} diff --git a/_src/2005/jetro.c b/_src/2005/jetro.c new file mode 100644 index 0000000..97770bb --- /dev/null +++ b/_src/2005/jetro.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include "SDL.h" + +#define X2(a) a a +#define X4(a) a a a a +#define S1(a,b,c) #a".."#b".."#c"." +#define S14(a,b,c) X4(S1(a,b,c)) +#define S2(a) #a"."#a"....." +#define S24(a) X4(S2(a)) +#define S4(a) #a#a#a#a +#define S3(a,b,c) S1(a,b,c)S4(..) +#define SE X4(X4(S4(..))) + +char l[]=SE SE X2(S3(J,H,M)S3(J,H,E)S3(F,E,A)S3(F,E,J)S3(H,E,O)S3(H,E,C)S3(H,F, +x)S3(H,F,L)),b[]=SE X2(S4(j.jv.j.v)S4(f.fr.f.r)S4(e.eq.e.q)S4(h.ht.h.t))SE,*r[3 +]={S14(v,v,q)S14(r,r,m)S14(q,q,l)S14(t,t,o),S24(J)S24(F)S24(E)S24(H),S24(M)S24( +J)S24(H)S24(L)}; + +#define B int +#define C double +#define S static +#define I(a,b,c,d,f,g) a=(f-d)/10.,b=1e-2*(d*(28-g)-f),c=1e-2*(d*f-8*g/3);\ +d+=a,f+=b,g+=c; +S C T;typedef float A;S B D,R,U,p=0;S A F[5][0100000]={{0},{0}}; + +void AA(void*u,Uint8*_,B L){u=u;while(L>0){B M=p&037777,s=p>>12,u=(s%R)[ +l],J=(s%U)[b],w=0,a=0,n;A v,q,m,E=(0x2000-(p&017777))/8192e0f;v=q=0; +#define EF_(x) F[w][1638##x+M +#define EF(l,s,ms) ((s*ms+EF_(4)-l]*(1-ms))/2.f+EF_(3)]/2.f) +#define FQ(s) (A)sin((0.12*pow(2,n/12.))*p*s) +#define IZ(v,c) v*=v c?v:0; +#define BF F[w][M]=F[w][M+16384]=q;v+=q;++w +#define IP(n,x,y,z,c) if(n!=46){x}q=EF(y,q,z);c;BF; +#define IS(s,c) if(q c s 0.75f)q=s 0.75f; +#define NQ(x,a,m) n=x-(x>=97?121:65)+a;q=FQ(m); +IP(u,NQ(u,12,1)m=FQ(1.01f);IZ(q,>6e-1)IZ(m,>6e-1)q+=m;q*=5e-1f*(E+1);,12288, +0.2f,;)for(;a<3;++a){char sn=(s%D)[a[r]];q=0;IP(sn,NQ(sn,12,0.25f)IZ(q,<0.3), +12288,0.2f,;)}q=0;IP(J,NQ(J,0,1/8.f)X4(q*=q;)q=(A)fmod(q*20,4)*4;,6144,0.25f,IS +(-,<)IS(+,>)q*=E)v*=0.6f;*(Sint16*)_=(Sint16)(v*32767);_++,++_,++p,--L,L--;}} + +B main(B c,char**a){SDL_AudioSpec f,d;c=c,a=a;D=strlen((!!c&24)[r]),R=strlen(l) +,U=strlen(b);if(SDL_Init(16)<0)exit(1);atexit(SDL_Quit);f.freq=22050,f.format=\ +AUDIO_S16,f.channels=1,f.samples=4096,f.callback=AA,f.userdata=0;if(SDL_OpenAu\ +dio(&f,&d)<0)exit(2);T=0;SDL_PauseAudio(0);getchar();SDL_CloseAu\ +dio();return 0;} diff --git a/_src/2005/klausler.c b/_src/2005/klausler.c new file mode 100644 index 0000000..74f2bd8 --- /dev/null +++ b/_src/2005/klausler.c @@ -0,0 +1,14 @@ +typedef unsigned char B;char*x[]={ +#include "dict.h" +0};typedef struct L{B*s;struct L*n;}L; +L*h[128],*l[128],*s[128],Z[sizeof x/sizeof*x],*F=Z;int c[256],m,a=1; +int k(B*q){int g=0;B*p=q;while(*p)g|=!c[*p++]--;return g-1&p-q;} +void u(B*p){while(*p)c[*p++]++;} +void S(int N,int r,int t,L*W){L*w;int i,n; + for(n=r0;n--)for(w=n==N?W:h[n];s[t]=w;u(w->s),w=w->n)if(k(w->s)) + if(n==r){if(t==m-1)for(i=a=0;i<=t;i++)printf("%s%c",s[i]->s,in:&h[g])=F++)->s=p; + while(++m<128)S(127,n,0,h[127]); + return a;} diff --git a/_src/2005/mikeash.c b/_src/2005/mikeash.c new file mode 100644 index 0000000..9fd18ab --- /dev/null +++ b/_src/2005/mikeash.c @@ -0,0 +1,22 @@ +;typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int i +;int A(void){return C=getchar();}int B(m s){return strlen(s) +;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n') +;if(C<0) return 0;i=0;if(C==';'){for +(defvar q= +";typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int iY;int A(void){return C=getchar();}int B(m s){return strlen(s)Y;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n')Y;if(C<0) return 0;i=0;if(C==';'){forY(defvar q=Y~sY;C!='\n';A()Y);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=CY;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n')Y;b[i] = 0;return b;}typedef defvar*format;m E(void){Y;m a=R();if(!a) return 0;if(*a==34)return aY;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return wY;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return wY;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37Y;m s=E();s[B(s)+1]=0;s[B(s)]=34;printf(f+1,s);R()Y;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;forY(format t ;*a;a++)*a=*a==o?p:*aY;R();return r;}else if(*a=='c'){c[0]=*E()-32/*Y(substitute #\Newline (char-upcase #\y ) q= )q= );*/Y;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E())Y;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return cY;}}return a;}int main(void){while(C+1)E();return 0;}Y" +;C!='\n';A() +);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C +;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n') +;b[i] = 0;return b;}typedef defvar*format;m E(void){ +;m a=R();if(!a) return 0;if(*a==34)return a +;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return w +;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return w +;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37 +;m s=E();s[B(s)+1]=0;s[B(s)]=34;printf(f+1,s);R() +;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;for +(format t ;*a;a++)*a=*a==o?p:*a +;R();return r;}else if(*a=='c'){c[0]=*E()-32/* +(substitute #\Newline (char-upcase #\y ) q= )q= );*/ +;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E()) +;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return c +;}}return a;}int main(void){while(C+1)E();return 0;} diff --git a/_src/2005/mikeash.new.c b/_src/2005/mikeash.new.c new file mode 100644 index 0000000..10d4b73 --- /dev/null +++ b/_src/2005/mikeash.new.c @@ -0,0 +1,33 @@ +;/* +#| +*/ +#define _DEFAULT_SOURCE +#include +#include +#include +#include +/* +|# +;*/ +;typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int i +;int A(void){return C=getchar();}int B(m s){return strlen(s) +;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n') +;if(C<0) return 0;i=0;if(C==';'){for +(defvar q= +";/*Y#|Y*/Y#define _DEFAULT_SOURCEY#include Y#include Y#include Y#include Y/*Y|#Y;*/Y;typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int iY;int A(void){return C=getchar();}int B(m s){return strlen(s)Y;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\\n')Y;if(C<0) return 0;i=0;if(C==';'){forY(defvar q=Y~sY;C!='\\n';A()Y);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C,i-=(b[i-2]==92&&C==92)Y;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\\n')Y;b[i] = 0;return b;}typedef defvar*format;m E(void){Y;m a=R();if(!a) return 0;if(*a==34)return aY;if(*a=='#'){c[0]=a[2]=='N'?'\\n':a[2];return c;}if(*a=='q')return wY;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return wY;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37Y;m s=E();char S[2048],*P=S,*p=s;for(;*p;p++){*P++=*p;*p==92&&(*P++=92);};*P++=34;*P=0;printf(f+1,S);R()Y;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;forY(format t ;*a;a++)*a=*a==o?p:*aY;R();return r;}else if(*a=='c'){c[0]=*E()-32/*Y(substitute #\\Newline (char-upcase #\\y ) q= )q= );*/Y;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E())Y;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return cY;}}return a;}int main(void){while(C+1)E();return 0;}Y" +;C!='\n';A() +);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C,i-=(b[i-2]==92&&C==92) +;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n') +;b[i] = 0;return b;}typedef defvar*format;m E(void){ +;m a=R();if(!a) return 0;if(*a==34)return a +;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return w +;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return w +;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37 +;m s=E();char S[2048],*P=S,*p=s;for(;*p;p++){*P++=*p;*p==92&&(*P++=92);};*P++=34;*P=0;printf(f+1,S);R() +;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;for +(format t ;*a;a++)*a=*a==o?p:*a +;R();return r;}else if(*a=='c'){c[0]=*E()-32/* +(substitute #\Newline (char-upcase #\y ) q= )q= );*/ +;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E()) +;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return c +;}}return a;}int main(void){while(C+1)E();return 0;} diff --git a/_src/2005/mynx.c b/_src/2005/mynx.c new file mode 100644 index 0000000..c0a9509 --- /dev/null +++ b/_src/2005/mynx.c @@ -0,0 +1,221 @@ +#define I int +#define c char * +#define G fscanf(f, +#define W while( +#define k return +#define Q if( +#define Z 512 +#include +#include +#include +#include +#include +#include +#include +#include +FILE *f; +short w[4] = { 24, 80 }; +I L, B, r, H; +c l[Z], b[Z], s[Z], S[Z][10], T[Z], h[Z]; +I +e(c s) +{ + I n = 0; + Q *s == '#') + k (I) strtol(s+1, 0, 0); + W n < Z) { + Q *S[n] && !strcmp(s, S[n]+1)) + k *S[n]; + n++; + } + k '?'; +} +void +P(I x) +{ + Q x == '\n' || w[1] - 3 < B) { + b[B] = 0; + b[B+1] = 0; + B = printf("%s", b); + B = snprintf( + b, Z, + "\n %s", + b + B + 1 + ); + r++; + } + Q b[B-1] != ' ' || !isspace(x)) { + b[B++] = isspace(x) ? ' ' : x; + Q w[1] - 3 < B) + *strrchr(b, ' ') = 0; + } +} +void +p(c t, ...) +{ + va_list x; + va_start(x, t); + vsnprintf(s, Z, t, x); + t = s; + W *t) + P(*t++); + va_end(x); +} +I +X(c s) +{ + I x; + c t = s; + long m = ftell(f); + W *t && (x = fgetc(f)) != EOF) { + Q *t == '*') + s = t++; + Q tolower(x) != *t) { + Q *s != '*') + break; + t = s; + } + t++; + } + Q *t) + fseek(f, m, SEEK_SET); + k !*t; +} +void +d(c s) +{ + Q 4 < B) + P('\n'); + P('\n'); + Q *s == 'h') + B = 1; +} +void +a(c s) +{ + *T = 0; + G + ungetc(fgetc(f), f) == '"' + ? "\"%511[^\"]" + : "'%511[^']", + T + ); + Q *s == 'a' || *s == 'f' || s[1] == 'f') { + free(l[++L]); + l[L] = strdup(T); + p(" [%d] ", L); + } + Q *s != 'a') + p("%s%s\n", T, *s == 'b' || s[1] == 'h' ? "" : "\n"); + X("*>"); +} +void *Y[] = { + "!--*-->" , 0 , + "a *href=" , a , + "ifr*src=" , a , + "fra*src=" , a , + "img*src=" , a , + "p*>" , d , + "bl*>" , d , + "br" , a , + "hr" , a , + "h*>" , d , + "/h" , a , + "/tr" , a , + "/dt" , a , + "/dd" , a , + "li*>" , d , + "*>" , 0 , + 0 , 0 +}; +I +main(I V, c *v) +{ + I x, n = 0; + c t = v[1]; + ioctl(0, TIOCGWINSZ, w); + f = fopen("entities.txt", "r"); + Q f) { + W G "%s %d", S[n]+1, &x) == 2) + *S[n++] = x; + fclose(f); + n = 0; + } + W t) { + I m = 0; + struct hostent *y; + struct sockaddr_in A; + L = 0; + B = 1; + Q !sscanf(t, "http://%255[^/]%n", h, &n) && !*h) { + Q !(f = fopen(t, "rb"))) + k 1; + goto e; + } + Q 0 < sscanf(h, "%*[^:]%n:%d", &x, &H)) + h[x] = 0; + else + H = 80; + y = gethostbyname(h); + Q !y) + k 1; + memcpy(&A.sin_addr.s_addr, y->h_addr, y->h_length); + A.sin_port = htons( (short) H); + A.sin_family = y->h_addrtype; + f = tmpfile(); + Q !f) + k 1; + W + connect( + m = socket( + A.sin_family, SOCK_STREAM, 0 + ), (void *) &A, sizeof A + ) + || errno == EINTR + ) + ; + n = snprintf( + b, Z, + "GET %s%s HTTP/1.0\r\nHost: %s:%d\r\n\r\n", + t[n] == '/' ? "" : "/", t+n, h, H + ); + Q send(m, b, n, 0) == n) { + W 0 < (n = recv(m, b, Z, 0))) + fwrite(b, 1, n, f); + } + close(m); + rewind(f); + X("*\r\n\r\n"); +e: + r = 3; + *b = ' '; + W r < *w && (x = fgetc(f)) != EOF) { + Q x == '<') { + void **p = Y; + W *p) { + Q X(*p)) { + Q p[1]) + (* (void (*)(c )) + p[1])(*p); + break; + } + p += 2; + } + } else { + Q x == '&') { + G "%9[^;];", T); + x = e(T); + } + P(isspace(x) ? ' ' : x); + } + } + printf("\n? "); + fflush(stdout); + fgets(T, Z, stdin); + Q *T == '\n') + goto e; + t = l[strtol(T, 0, 0)]; + fclose(f); + } + k 0; +} diff --git a/_src/2005/persano.c b/_src/2005/persano.c new file mode 100644 index 0000000..9b5d26c --- /dev/null +++ b/_src/2005/persano.c @@ -0,0 +1,138 @@ +#include +#include +#include +#include + +#define H 20 + +#define X for +#define F(v,b) X(k = 0; k < 3; k++) v[k] = b; + +typedef double R, V[3], U[4], (*J)(R); +typedef void Z; +typedef int _; + +V o, d, v; +R (*q)[H][6], C[4*H][H][6], sr = 15, br = 25, A, s, t; +_ P, Q, g, S, k, e = 256, (*u)(_) = putchar, D[64]; +J f = cos, Y = sin; +char B[256]; + +Z +T(_ *p, _ k, _ n) +{ + _ g; + + *p = n; + + X(g = 0; k && g < 4; g++) + T(p + (9 & (g * 4|g))*(1< e-2 || c==129) && (*B = S, S = fwrite(B, S+1, 1, stdout) - 1); +} + + + + + + + Z N + (R*v){R w=sqrt + (*v**v +1[v]*v[1] + +v[2]*2[v]);F(v,v[k] + /w)}Z K(_ j){V + n,p ;R*b=(* + q) [j],w=f + (A),x= + Y(A); + F(p, + br*o[ + k]+sr + * (n[ k] =f(t)*k[v]+ + Y(t)*(v[(k+1)%3]* d[( k+2)%3]-v[(k+2)% + 3]*d[(k+1)%3])))*b++=p[1 ]+e/ 2,*b++=-*p*x+ + p[2]*w-e*e,*b++=(*p*w+p[2]*x)+e/2;F( b,fabs(*n + *!!k+n[1]*( k<2)+n[2])/sqrt(2+ !(k-1))) + }Z M(R*a,_ s,Z(*m)(_)){_ i;R d= + pow(25/log (36),4)/s/ 377;X( + *a=i=0;i + 97)));}Z E(_ z){R + *r,*a,*b;U*q,l,x,d + ,I[256];_ i,j,m,c,y, + w,h,Y=sizeof l;fputc( + 46,stderr),M(&s,4*H,G), + W("ibcbcbbbbb,"),g=130, + O(e/2);X(y=0;yC[i /H][i%H][1 + ]&&( memcpy(*q, + x,Y),* *q=C[i/H][ + i%H][1 ]),h=1;h< + 4;h++)x [h]+=h[d]; + memcpy(l ,x,Y);}X( + i=0;iD[(y*8&56)+(i&7) + ]), c<<=k/4+2,c|=(m|-(m>k))& + k;} O(129);u(0);}_ + + + +main(_ c, char **v) +{ + if (c < 3) + return fprintf(stderr, "Usage: %s P Q [F]\n", *v), 1; + + P = atoi(v[1]), + Q = atoi(v[2]), + + T(D, 3, 0); + + W("bb\346cbcba98FIG"); + + X(; k < 384; k++) + u(k / 3<<("gdb"[k%3] - 97) | 31 | (k % 3!=1)<<5); + + W("bbbce0.2EPACSTEN\x0b\xff!"), + + M(&A, c > 3 ? atoi(v[3]) : 40, E), + + u(59); + + return 0; +} + +/* vi:set ts=8: */ diff --git a/_src/2005/sykes.c b/_src/2005/sykes.c new file mode 100644 index 0000000..5587970 --- /dev/null +++ b/_src/2005/sykes.c @@ -0,0 +1,66 @@ +#include +#include +#include +#define P *p +#define E (s?s-1?s-2? +#define T (s=fgetc(g)) +#define _ m[n& +#define L R( +#define b ):L +#define G ):( +#define r =t& +#define F _++k+O] +#define W t--?t--? +#define Y _ k--+O]= +#define M W W W W W W W +#define J *E&D:&V:&I:&C) +#define q C|Z|I|D|B|V|S|32 +#define H E Z:C:V:S)&&(d+=P&l?P-O:P) +#define U(z,w)(t=w,d+=z,_ t]+_ t+1]*O) +int d,C,Z,I,D,B,V,S,i=49152 +,t,s,o,h,z,O=256,n=65535,l=128,f=255,e,w; unsigned char*p,m[65536],a,x,y,k,*u, +*j=" ./ p/ 7 ] . 6 6 p t7 r(0)1*+2,4WgcovGn^f_NVO>F?T\\swldiHZYI9QJ" +"RCKSL[b<% <% '< <% +< <% 7$ ($A @$A " +"($A &$ $A *$ $A C2 2; =2; 62; '2 2; +2 2; D# #B ?#B 6#B &# #B " +"*# #B F HFG 1 L HFG 'F HFG NFM F :89 :89 J8I :89 &8 :89 +8K :89 ., " +".,/ 5,0 .,/ ', ,/ +, ,/ -E -E3 4E -E3 &E E3 *E E3 2133024425660788" +; R(x){ Z=x?0:2; S=x&l; } K(x){ R(x-P); C=x1?v[1]:"", j+32); t=i; if(g) { ; + for(; T+1; + _ t++ ]=s); + w r /* ### COMMODORE BASIC ### */n ; + d=w?i: U(C, n + -3); /* READY. */z=c> + 2?atoi( v[2])+1 + :4; c=z ? n * z + / 4 : n; nodelay( + initscr( ), 1 ) ; + curs_set(I); cbreak(); noecho( ) ; for (; ; + ) { o++ % ( c *4) ?h :( h= getch () ,h-ERR?(_ + 162]=h|l):0); if(!w){ s=(_ 59408] + |=z?l:0)&15; _ 59410]=~(h-ERR?(s^8?0:j[h|l]&1)|(j[h]/8 + -5-s?0:1<>6; t=j[i+O]-35; M M M W 0 : L a = y G k = x G L + a=x)G L x = k ) G L y=a)G L x = a ) G P =y G P = x G P + =a G t=a-P-1+C,C r O?0:1,V=((a^ P ) & ( a ^ t )&l)/2 , L a r + f)G d=F,d+=F*O+1 G A(),d=F,d|=F*O G t=P,L P=P/2|C*l),C r 1 G t=P,L P=P*2| + C),C=t/l):A(b a=F G Y q G Y a G L a|=P)G C=P&1,L P/=2)G L y=P)b x=P b a=P G + s=U(1,--d),X(),d=s G d=i&32?U(0,e):e b++y b++x b++P b a^=P b--y b--x b--P): + K(y):K(x):K(a G J=0 G J=E 8:8:4:1)G d--,B=16,N() G L a&P),V=P&64 + ,S=P&l):!H:H:(C=P/l,L P*=2)b a&=P G t=a+P+C,C r O?1:0,V=(~(a^P)& + +(a^t)&l)/2,L a r f)); t=e^O*O/2; if(t<1000){ s=P%l; i=A_REVERSE; P>s?attron(i) +:attroff(i); mvaddch(t/40,t%40,s+w<32?s+64:s>95+w?s-32:s); } } } perror(*v); } diff --git a/_src/2005/timwi.c b/_src/2005/timwi.c new file mode 100644 index 0000000..d29f4d5 --- /dev/null +++ b/_src/2005/timwi.c @@ -0,0 +1,26 @@ +#include +#define _ main( +#define _l ___l ___l ___l ___l ___) +#define __l int +#define ___l ___)*( +#define ____l (_l], +#define ____ 1 +#define ___ __+_____ +#define __ ____+____ +#define _____ __+____ +#define ______1 *(l__ +#define _____1 *__1%(__ +#define ____1 )?( +#define ___1 _1&(__ +__l __I[____l _I[____l*l__=_I,*l_=__I;__l _ __l _1,__l*__1){__l _l_; +return ___1+ __ ____1 ___1 ____1*__1 = getchar()):__ ____1*__1<____? +____:_____1+___ ____1 _____1+_____ ____1 _____1+____)____1 ___1+___+ +____ ____1 _____1 +__)____1 _____1 )____1 *l__)++:_____1+____)-____? +______1 ++) :_____1+_____) -____?__:printf("%d\n",*l__):_____1+____+ +___ ____1 *l__) =*(l_++ ):__:___l ____- ____):_____1 +_____)-3?__-2: +____:(___1+____+___ ____1 _____1)____1*l__)-- :_____1+__)?__:______1 +--):___l 0))?__:_ _1,__1+____)+____:(___1+____+___ )) &&* l__?_ ___1 ++___+___+__),__1+____)?_ ___1+11 )|(___1)?____:__- 2),__1):____-1 :( +_l_=_ ___1 -____+___l ____),__1+____ )) ?_l_+_ ___1 )?_1 :___1+10)|( +___1-____ ____1 __):0),__1+_l_):0):__:_1%(__ ____1 _1/(__)) ?_ scanf +("%i",__1 ____1 _____):(___l _____)-____,__1 +____):_ _____,l_):__;} diff --git a/_src/2005/toledo.c b/_src/2005/toledo.c new file mode 100644 index 0000000..cf98e3c --- /dev/null +++ b/_src/2005/toledo.c @@ -0,0 +1,64 @@ +#define F getchar()) + #define H(z)*n++=z; + #include + #define v main(0,0,0 + #define Z while( + #define _ if( +#define o(d) (u[l]=0,l[d]=6^e,q=1e4>v,0),l[d]=0,u[l]=e^6,q) +#define I(H,n) { _ r=l[x=H],!r|(r^e)<-1){ _ j=u[l],-7==r|6==r\ +){ n; e=~e; return 1e5- f; } u[l]=0,t=j+1,i=j-1; _!i&89x)t=j,i=-7; Z++ix)*(9*O[28+i]-288))+O[r+28\ +]*9-288+O[x%10+33]-f-O[33+u%10]; x[l]=i; S|=(21=\ +=u|21==x)*2+(u==28|28==x)*4+(91==u|x==91)*16+32\ +*(u==98|x==98)+(20==d)*64*x; a-=k>f?main(a,f+1\ +,M,k):0; _ i==c&u==h&!f&N&a>-1e4&x==y)longjm\ +p(z,1); S=b; _!N|f&&(a>M||!f&a==M&&1&rand()\ +)){ _!f){ _ k){ c=i; h=u; y=x; } } else _ \ +L-aGK[_`fFDZXEYR" "L\t####" +"##B#A#@#G#F#E#D#K\t\3Zlv#tjm" "\3J#tjm\3Pwb" +"ofnbwf\3Joofdbo\3)&`&`.&`&`" "#+&g*\t"; G y, +c,h,e,S,*s,l[149]; jmp_buf z ; G main(G L,G f, +G N,G k){ G u=99,p,q,r,j,i,x ,t, a, b,d,M=-1e9 +; char *n; if( *l){ e=~e; Z u >21){ q= l[--u]^e; +_!-- q){ _!l[p=e?u-10:u+10]){ I(p,)_ e?u>80 & !l[p +-=10]:u<39&!l[p+=10])I(p,)} _ l[p=e?u-11:9+u] )I(p,) +else _ u-1==S>>6){ l[u-1]=0; I(p,l[u-1]=-2^e); } _ l[ +p=e?u-9:11+u])I(p,)else _ S>>6==1+u){ l[1+u]=0; I(p,l +[1+u]=e^-2); } } _!--q){ n=O+41; Z++n<50+O)I(u+80-*n, +)} _ 0q){ n=q==2?53+O:O+49; Z++nh|98(h+1 )% + 10); O[h++]^=3; } n=O +14; s=20+l; Z + ++s<29+l){ 10[s]=1; 70[s]=~ ( * s = * + n++ -+84); 60 [ s] =-2; } Z n=J){ puts + (58+O); u=19; Z++u<100){ H(32)_!( u%10 + ))H(32)H(O[7+l[u]])_(9+u)%10>7){ H(58 + -u/10)H(32)_ u&1)puts(n=J); } } puts + (O+58); _-1e4 >v , 1)){ e=~e; puts + (O+(v,0)> 1e4?e?90:82:96)); break + ; } _ 11&&u!=c + [O]); c=e^c-7; } } _! + setjmp(z)){ v+1,1); + puts( 106+ + O); } } Z + 10!= + F; } diff --git a/_src/2005/vik.c b/_src/2005/vik.c new file mode 100644 index 0000000..73a6a69 --- /dev/null +++ b/_src/2005/vik.c @@ -0,0 +1,109 @@ +#include +#include +#include +#include +#include +#include +Window L; +GC N; +Display *K; +XEvent O; +XImage *Q; +float w, x, y[7 << 16]; +struct timeval S, U; +int a, b, c, d = + 92, e, f, g, h, i, j, k, l, m, n, o, p, *q[96], r[7 << 16], s[96], *t, + *u = r, *v, P = 256, R[64], T, J = 12288; +struct +{ + int a, b, c, d, e; +} A[9999], *B, *G, *H; +unsigned char C, D[9999], *E = D, F[] = " .bmp"; +FILE *I; + +#define Q(o,X,Y,C)B->b=b+32*o,B->c=c+32*X,B->d=Y,B->e=C,B++->a=l, +#define D(o,X)(int)((X*(B->b-e)-o*(B->c-f))/(x*B->e-w*B->d)) + +int +main (int X, char **Y) +{ + for (j = J << 8, x = y[i], w = y[i + 32], B = A; k = D (x, w), B->b; + k >> 8 ? 0 : (l = D (B->d, B->e), l > 0 + && l < j) ? j = l, h = k, g = B->a : 0, B++); + for (; + X + && (p = + 1 | 3 * (o = (--X < 2 || 119 - 1[Y[1]] ? 320 : atoi (2[Y]))) / 4);) + { + for (e = f = J / 2, K = XOpenDisplay (0); m < o << 8; + y[m] = + sin ((m & 255) / 20.4 + asin ((m / P - o / 2) / 3.2 / o)), + D[m & 511] = 10 + d * !(1 & (m >> 3 & m)), r[m++] = + m / 18 << (16 & (m >> 6 ^ m))); + for (N = + XCreateGC (K, L = + XCreateSimpleWindow (K, RootWindow (K, 0), 0, 0, o, p, + 0, 0, 0), 0, 0), ((I = + fopen (X ? + Y[X] + : "", + "r")) ? + fread (E + 1, + 1, + 1 << 15, + I), + fclose (I) : + 0), B = G = + A + J / 3; *++E; f = l == 32 ? e = b + 99, c + 99 : f) + for (l = *E - 10, *F = *E, k = !l, b *= !k, c += P * k, b += P; + l > 54 && l < 96 + && (Q (0, 0, 1, 0) Q (8, 0, 0, 1) Q (8, 8, -1, 0) + Q (0, 8, 0, -1) + ! q[l] && (s[l] = 1, q[l] = u, I = fopen (F, "r"))); l = J) + for (q[l] = ++u + 19, m = 2; + n = (m++ % 3 ? n : 0 ** ++u) >> 8 | C << 16, *u = + n, 0 < fread (&C, 1, 1, I) + || (m /= J, s[l] = m ? m : 1) * fclose (I);); + for (XMapWindow (K, L), + XSelectInput (K, L, KeyPressMask | KeyReleaseMask), H = A; G->b; + *H = *G++, H += !B->b) + for (B = A + J / 3; + B->b && !(B != G && B->b == G->b - 128 * (B->d - G->d) + && B->c == G->c - 128 * (B->e - G->e)); B++); + for (Q = + XCreateImage (K, DefaultVisual (K, 0), DefaultDepth (K, 0), + ZPixmap, 0, (char *) (v = + malloc (4 * o * p)), o, p, + 32, 0); + d = (d + R[19] - R[17]) & 127, n = R[18] - R[20], n ? (i = + o * 128 + + d + (n < + 0) * + 64, main (0, + Y) + > + 200) ? e += + (int) (y[i] * 64), f += (int) (y[i + 32] * 64) : 1 : 1; + XSync (K, 0), gettimeofday (&S, 0), m = T - S.tv_usec) + { + for (T -= + (m > 0 + && m < J * 4 ? U.tv_usec = + m, select (0, 0, 0, 0, &U) : m) - 4 * J, a = + a + 1 & -1 >> 1, m = 0; + k = + 1 + + (int) (p * 512 / + ((i = m * P + d, g = n = + 0, main (0, Y)) * y[m * P + 32])), m < o; m++) + for (t = g ? c = + 64 * s[g], q[g] + h / 4 + 64 * (a / 3 % s[g]) : t; + l = 32 - (17 << (k < 2)) * (2 * n - p) / k, n < p; + v[m + o * n++] = l >> 6 ? 4477904 << (l < 0) : t[c * l]); + for (XPutImage (K, L, N, Q, 0, 0, 0, 0, o, p); XPending (K); + R[63 & XLookupKeysym (&O.xkey, 0 & XNextEvent (K, &O))] ^= + O.type == KeyPress || O.type == KeyRelease); + } + } + return j; +} diff --git a/_src/2005/vince.c b/_src/2005/vince.c new file mode 100644 index 0000000..d758fbd --- /dev/null +++ b/_src/2005/vince.c @@ -0,0 +1,90 @@ +#include +#include +#include +#include +#include +#define E(x) { printf("%i\n",x); goto l; } +#define G fgetc(F) +#define H glEnable( +#define I glMaterialfv(GL_FRONT, +#define J glMatrixMode( +#define L (y +#define M 640,480 +#define N NULL +#define O GL_DIFFUSE , i +#define P glCallList(u); +#define T glTexCoord2i +#define U glLightfv(GL_LIGHT0, +#define V R(); glVertex3i(c,m,n); +#define X GL_TEXTURE_2D +#define Z(x) G; x=G; x=x<50-(x==59); + +void Y() +{ { { { { { { { { { { { { { { { + + { { { { { { { { { { { + { { { { { { + { { { { { { { { + { { { { { { + { { { { { ; { } } } } } + + + } } } } } } } + } } } } } } + } } } } } } + } } } } } } + } } } } } } } + +} } } } } } } } } } } } } } } } + +void Q() +{ { ; { { { { { { { { + { { { { { { +{ { { { { { +; { { } } } } } } } } +} ; } } } } } } } } } +} } } } } } + + + + FILE *F; int u,t,l,m,n,x=0,a=0,b[]={ GLX_DOUBLEBUFFER, + GLX_RGBA , GLX_DEPTH_SIZE , 16, None},o,n,c ; void R() { + Z(c); Z(m); Z(n); } int main( int _, char **A) { char f[ + BUFSIZ ] ; GLXContext r ; XVisualInfo * v ; Display *y; + XEvent e ; GLfloat g=0, h=10, i[ ]= { 1,1, 1, 1, 5,5, 100 + ,0, .6, .6, .6 ,1 } ; XSetWindowAttributes s; GLubyte j[1 + <<10] ; Window w; if(! L= XOpenDisplay ( N ) ) ) E(1) ;if + ( ! +glXQueryExtension L , N , N ) ) E (2); v=glXChooseVisual L , +DefaultScreen (y ) , b ) ; s.colormap = XCreateColormap L , +RootWindow (y,v -> screen), v -> visual, AllocNone ); if (!( +r= glXCreateContext L, v, N, 1) ) ) E (3) ; strcpy(f, *A ) ; +s.event_mask=KeyPressMask; strcat(f,".c"); F=fopen(f,"r" ) ; +w= XCreateWindow L, RootWindow( y, v -> screen ), M , M, 0,v +->depth,InputOutput, v->visual , CWColormap|CWEventMask, &s) +;glXMakeCurrent L , w , r ); H GL_DEPTH_TEST ); if ( ! F )E( +4 ) ; glShadeModel ( GL_SMOOTH ) ; while ( a != 89 ) a = G ; +G; G ; glGenTextures( 1, & t ); while ( x< 1024 ) { G; a =G; +j[ x++ ] = 128; j[ x++ ] = 128 & - ( a<33 ); j [ x ]= j[ x-1 +]; x++; j[x++] =-1;} glBindTexture(X,t); glTexParameteri (X, +GL_TEXTURE_MIN_FILTER , GL_NEAREST ) ; glTexImage2D( X ,0, +GL_RGBA, 16 , 16 , 0 , GL_RGBA, GL_UNSIGNED_BYTE , j ) ; J +GL_PROJECTION ) ; gluPerspective( 60 , 1.333 , 1 , 100) ; J +GL_MODELVIEW); u=glGenLists(1); glNewList(u,GL_COMPILE); H X +) ; while ( a != 81 ) a = G ; G ; G ; for (x=0; x<6; x++ ) { +glBegin(GL_QUADS); R(); glNormal3f( c, m,n); T(1,1); V T (1, +0 ) ; V T ( 0 , 0 ) ; V T( 0 , 1 ) ; V glEnd ( ) ; } +glEndList( ) ; XMapWindow L , w ) ; c = 0; for ( ; ; ) { if( +XPending L ) ) { XNextEvent L , &e ) ; if((XLookupKeysym ( ( +XKeyEvent *)&e,0))&1<<5){ h=10; i[c]=!i[c]; c++; c&=3; } else +E(0)} glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ) ; +glLoadIdentity(); gluLookAt ( -2 ,0 ,5 ,0,0 ,0,0 ,0 ,1 ) ; H +GL_LIGHTING); H GL_LIGHT0 ); U GL_POSITION, i + 4); U O) ; U +GL_SPECULAR,i); glLightModelfv( GL_LIGHT_MODEL_AMBIENT,i +8) +; I GL_AMBIENT, i+8); I O + 8 ) ; glRotatef( g, 1, 1, 1) ; P +glTranslatef(-h,0,0); P usleep (4000); g+=.07*x; if (g>360) +g-=360.0; h-=x /100.0; glFlush(); glXSwapBuffers L ,w);} + +l: +return 0; +} diff --git a/imgs/2005-boutines.png b/imgs/2005-boutines.png new file mode 100644 index 0000000..89a52df Binary files /dev/null and b/imgs/2005-boutines.png differ diff --git a/imgs/2005-jetro.mp3 b/imgs/2005-jetro.mp3 new file mode 100644 index 0000000..2c3a1ec Binary files /dev/null and b/imgs/2005-jetro.mp3 differ diff --git a/imgs/2005-persano-1.gif b/imgs/2005-persano-1.gif new file mode 100644 index 0000000..35f6869 Binary files /dev/null and b/imgs/2005-persano-1.gif differ diff --git a/imgs/2005-persano-2.gif b/imgs/2005-persano-2.gif new file mode 100644 index 0000000..185f97b Binary files /dev/null and b/imgs/2005-persano-2.gif differ diff --git a/imgs/2005-persano-3.gif b/imgs/2005-persano-3.gif new file mode 100644 index 0000000..14d3277 Binary files /dev/null and b/imgs/2005-persano-3.gif differ diff --git a/imgs/2005-persano-4.gif b/imgs/2005-persano-4.gif new file mode 100644 index 0000000..b68fbf0 Binary files /dev/null and b/imgs/2005-persano-4.gif differ diff --git a/imgs/2005-vik-1.png b/imgs/2005-vik-1.png new file mode 100644 index 0000000..932cea8 Binary files /dev/null and b/imgs/2005-vik-1.png differ diff --git a/imgs/2005-vik-2.png b/imgs/2005-vik-2.png new file mode 100644 index 0000000..ffb48fb Binary files /dev/null and b/imgs/2005-vik-2.png differ diff --git a/imgs/2005-vince-1.png b/imgs/2005-vince-1.png new file mode 100644 index 0000000..2edf4b3 Binary files /dev/null and b/imgs/2005-vince-1.png differ diff --git a/imgs/2005-vince-2.png b/imgs/2005-vince-2.png new file mode 100644 index 0000000..2c052c6 Binary files /dev/null and b/imgs/2005-vince-2.png differ diff --git a/imgs/2005-vince-3.png b/imgs/2005-vince-3.png new file mode 100644 index 0000000..2087364 Binary files /dev/null and b/imgs/2005-vince-3.png differ diff --git a/index.md b/index.md index 732ecaf..680b4e3 100644 --- a/index.md +++ b/index.md @@ -15,6 +15,7 @@ IOCCCをよく知らない人は、まず[このサイトについて]({{ site.b 更新履歴: +* 2021/04/17: [IOCCC 2005]({{ site.baseurl }}{% link 2005/index.md %})の解説を公開しました。 * 2021/04/10: [IOCCC 2004]({{ site.baseurl }}{% link 2004/index.md %})の解説を公開しました。 * 2021/04/04: [IOCCC 2001]({{ site.baseurl }}{% link 2001/index.md %})の解説を公開しました。 * 2021/03/28: [IOCCC 2000]({{ site.baseurl }}{% link 2000/index.md %})の解説を公開しました。 diff --git a/patches/2005-mikeash.patch b/patches/2005-mikeash.patch new file mode 100644 index 0000000..8284f73 --- /dev/null +++ b/patches/2005-mikeash.patch @@ -0,0 +1,35 @@ +--- mikeash.c ++++ mikeash.c +@@ -1,18 +1,29 @@ ++;/* ++#| ++*/ ++#define _DEFAULT_SOURCE ++#include ++#include ++#include ++#include ++/* ++|# ++;*/ + ;typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int i + ;int A(void){return C=getchar();}int B(m s){return strlen(s) + ;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n') + ;if(C<0) return 0;i=0;if(C==';'){for + (defvar q= +-";typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int iY;int A(void){return C=getchar();}int B(m s){return strlen(s)Y;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\n')Y;if(C<0) return 0;i=0;if(C==';'){forY(defvar q=Y~sY;C!='\n';A()Y);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=CY;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n')Y;b[i] = 0;return b;}typedef defvar*format;m E(void){Y;m a=R();if(!a) return 0;if(*a==34)return aY;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return wY;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return wY;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37Y;m s=E();s[B(s)+1]=0;s[B(s)]=34;printf(f+1,s);R()Y;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;forY(format t ;*a;a++)*a=*a==o?p:*aY;R();return r;}else if(*a=='c'){c[0]=*E()-32/*Y(substitute #\Newline (char-upcase #\y ) q= )q= );*/Y;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E())Y;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return cY;}}return a;}int main(void){while(C+1)E();return 0;}Y" ++";/*Y#|Y*/Y#define _DEFAULT_SOURCEY#include Y#include Y#include Y#include Y/*Y|#Y;*/Y;typedef char n;typedef n*m;int C;n c[11];n y[]={37,100,0};n b[2048];int iY;int A(void){return C=getchar();}int B(m s){return strlen(s)Y;}n w[2048];typedef m defvar;m R(void){do A();while(isblank(C) || C == '\\n')Y;if(C<0) return 0;i=0;if(C==';'){forY(defvar q=Y~sY;C!='\\n';A()Y);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C,i-=(b[i-2]==92&&C==92)Y;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\\n')Y;b[i] = 0;return b;}typedef defvar*format;m E(void){Y;m a=R();if(!a) return 0;if(*a==34)return aY;if(*a=='#'){c[0]=a[2]=='N'?'\\n':a[2];return c;}if(*a=='q')return wY;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return wY;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37Y;m s=E();char S[2048],*P=S,*p=s;for(;*p;p++){*P++=*p;*p==92&&(*P++=92);};*P++=34;*P=0;printf(f+1,S);R()Y;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;forY(format t ;*a;a++)*a=*a==o?p:*aY;R();return r;}else if(*a=='c'){c[0]=*E()-32/*Y(substitute #\\Newline (char-upcase #\\y ) q= )q= );*/Y;R();return c;}else{n z=*a;int d=atoi(E()),e=atoi(E())Y;sprintf(c,y,z-'+'?z-'-'?z-'*'?d/e:d*e:d-e:d+e);R();return cY;}}return a;}int main(void){while(C+1)E();return 0;}Y" + ;C!='\n';A() +-);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C ++);R();}else if(C=='('||C==')')b[i++]=C;else if(C==34)do b[i++]=C,i-=(b[i-2]==92&&C==92) + ;while(A()!=34);else do b[i++]=C;while(!isblank(A())&&C!='\n') + ;b[i] = 0;return b;}typedef defvar*format;m E(void){ + ;m a=R();if(!a) return 0;if(*a==34)return a + ;if(*a=='#'){c[0]=a[2]=='N'?'\n':a[2];return c;}if(*a=='q')return w + ;if(*a=='('){a=R();if(*a=='d'){R();strcpy(w,E());R();return w + ;}else if(*a=='f'){R();m f = strdup(E());*strchr(f,126)=37 +-;m s=E();s[B(s)+1]=0;s[B(s)]=34;printf(f+1,s);R() ++;m s=E();char S[2048],*P=S,*p=s;for(;*p;p++){*P++=*p;*p==92&&(*P++=92);};*P++=34;*P=0;printf(f+1,S);R() + ;}else if(*a=='s'){n p=*E();n o=*E();m r=strdup(E());a=r;for + (format t ;*a;a++)*a=*a==o?p:*a + ;R();return r;}else if(*a=='c'){c[0]=*E()-32/*