コードでプレゼン

昨晩は眠かったので、Java への不満を自然言語で語るという男らしくないことをしてしまいました。男は黙ってコードで語れ。ということで「コードでプレゼン」です。

s="1o,%+0s[|JcqM_OF-qdVn'gsbj&lw0)I+[h1rGsG)dMOt{?RzsV'Gj26<m/3[J}3c,*)<)R'?]L@
EEJYUadI8;v2fE=pY$29GE0peF:aF(o~ef8_meJyJeA:4Za|C1kzog}Li5bgMw_`Y]wM5BWuHT8:)yM
(oK/XSNCO~_5(T;68|iKpX_{9rCw*{i2o,y_VtFR|1H1NdD^J9T+%&[c2E6]Sub'Va5Q^`OKxjL.vln
+yybck|3'oxEFU>ZgXG]~)h(5p.M9%Kv(EvavBc8ktK__sbV;)>3u,Y_xi(7{F[,1/?5XcqipHAB9BV
W;:oGuzFHL_7A*l1<4k7P;~oWleGpLHU`>9ski:s]BQmIJE]*ycssBet<?S8E`boh0U*ip~Ud~c.<*P
SV3=p:C[Xry&4?.u`IGzCKi@}]8:uT7I:42w,)T2eSC1Km{{vn8ee+m~q}NZMLAwP:uBFIRDP2cfR5d
:hp<s;,}y'xv:&wA&vxGu2f;U>+S7a72?U8Jo{obk-7pN383=VADtB|LYfE{ca2m,.M]wZ%0h*.WNY?
d4{[3w{b5yW'6eu<C>B2P[g}5:tY_KXd/c5s_)BbuPzSdh}i4Q8b;iCIr_N`c`H   dPjPvF$N4I/m;
`V:q24,%4A                M*Jr*['Y^zj`ja2gh4:Mk7NUc,0    BN   ,;   huRLEX|}*y+5
,0sn_m+llX                C1mnQ=w5@uuL^lVNHesq2w,)T30    Xq.   /*   se0AO*6o.6o
-[eC^1e}]GM59oKJq~O6vr    b>B*S'PxYoX0V(N?^K`8<f:Dl7?    )D{X   ef+;0yLn'gIxsL}
KRZugYO`&6LN.YYV3r,&Ao    2>+sLU'GW^$kZC0>y1,^t'FSZ{i      SO?iplQpW{nfJ@KvSc^P
(L9]}]-HGT1%L)0P=uDvEr    $ENM3|               $'.c-(         4_u|(|IHhJ<9g*}Jg
diRUd@b8UtFI=eobD6,.E{    kW8SN*               `}Li?o    37      ,,AaU9sK/P[S2s
,4i9tl=2o,nt^`G/bAg.9x    Q`^j%x/&5:YKnj)+t;Nz7{?ndtS    {zyzn   KYlKe?mE;.-&Xr
QBg.2$FJQnFG8-I4MDd8ob    Ua?ft)5wIxXa22,IF=?/A%(ri-P    TyD<Paks~X($H9(0K<%s)=
qErj?9Z,VX                QM83*nsV+1SQRLhPibfUr1a;6's    N'F"#]pT~|{i<xzKOJsdQF
#uRPIDCgpf                &6/D|_[1c^<Zw\p9\uxu[DP\(YH    0?/$r8M1]ZI).?mT&Y_|)n
eval e="s.gsub!(/\\s/,b='');z=0;s[/,.{\#{i=s.to_i(36)+m=2}}/][1..-3].each_byte{
|x|z=z*90+x-(x>91?37:36)};(b<<(z&255);z>>=8)while z>j=0;o='s=\"';z=proc{|c|(m=0
o<<10)if 78<m+=1;o<<c};require'zlib';f=Zlib::Inflate.inflate(b).each_byte{|x|f=
!f;(x-=1;z[f ?j ?j<(k=s.size)?s[(i+j+=1)%k]:(j=!f;z[34];x-=####################
1;35):m<78?rand(91)+36:35:32])while x>0};puts(o+(a=''<<10)+##(c)2007, Y.Endoh##
('eval e='+e.delete(a).dump).gsub(/.{79}/,'\\0'+a)+'#'*20)"####################

動かし方。

$ cat code | ruby
$ cat code | ruby | ruby
$ cat code | ruby | ruby | ruby
...

ぶっちゃけ IOCCC斉藤一 (あくそくざん) の劣化コピー*1です。多倍長整数や pack や zlib のおかげで 11 ページ盛り込めました (字が小さいのもあるけど) 。字が下手なのはペイントのせいです。複数言語を循環させようかと思ったのですが (cat code | ruby | perl | python | php | ruby | perl | python | php みたいに) 、面倒だったのでやめました。

*1:元ネタはデコード部分にも空白が食い込んでいるなどもっと手がかかっていますし、quine のやり方もかっちょいいですし、何より内容にセンスがありますよね。