2010-12-24
■[Ruby] Merry Quine-mas 2010
今夜は、年に一度の W. V. Quine の命日イブです。
%;';;X= %q(x=1; z="%c"%
32;eval %w(w=N= Merry =128;r=
z*79+$/; ;p=open" / dev/dsp
","w"rescue$_;/ / ;eval"s
rand(%s)"%$*[ d=0];a=[];s=(r+z+% (%;';;X=#{z* 3}%q(#{X});e val(X))
+r*=23).l ines.map{|l|l.chop+ r};t=proc{|y|s [y][x-1,w].sca n(/\S
/){s[y+1][m=x -1+$` .size ,1]== z&&a< <[$&,m, y,s[y
][m]=$/]};y};t[ 23];f =(0.. 1071) .map{|i|c,x,y =a.shuffle!. pop;s
[y][x]=z ;[794-46 .03*i **0.4 +y/k= (3+ra nd*w= 3)/9,[t
[t[y]-1 ],x,c], (0..y /k).m ap{[y -=k,0.5+x+=k*r and*2-k,?*]}]} ;"|ii
xCG40_| CK8&d9B ix0,B J?B?G ^K9CG CJ|ii>Ci?9CV; =*-*.sEA.2gA w>dc=
: `:z:J> s 9QvA:> J taaA>` : @AP;Fa c
y =Anm|?Bdqr h ?<CDJCD<IU < DuCJ>:d_C? h ?<CWC:'.'+ r
9 A.*. '>| =*- * .:9i 9A> :JC s :Q> :>9 CJA= g `;C i9A >M". b
yt es{|c|a+=([% [+. 5$2-'30&)"/: (7% !*][c%19].or d]* [47,23,11][4 -c
/1 9]< <3 3). *c/ 95 +1} ;$ ><< (T= "% q\x 7e
' #{e="\x1 b [ "}H#{e}J # { e}?25")+ " l ";863.do w
n to(0){|i|b=r + [ "'"*25]*2*"_ ( c )_2010_@mame t t er,@hirekoke "
;f.map{ |j,x,v |i<j&&( y,x,c= v.pop| |x;x<0| |x>78| |b[x+y.
to_i*80]=0<i&&i< 40??#:c)};($><<( i>0?e+"H":T+"h") +b).flush;(p)?4.
times{N. times{v =8;4.tim es{|l|t =a[l*N* 9+d/N%11 52];t>3 3&&v+=(d
*0.11*4**(t/24 .0-l%3))%8<=>4 };d+=1;p<<[16* v].pack("C*")}
;p.flush}: sleep(0.1) };puts)*"" ;);eval(X)
'''''''''''''''''''''''''_(c)_2010_@mametter,@hirekoke'''''''''''''''''''''''''
80x24 の端末上で動かしてください。/dev/dsp が使える環境では音が鳴ります (使えなくても動作はします) 。windows なら cygwin でどうぞ。Linux だと aoss や padsp を使うといいかもしれません。ruby 1.8.7p299 と 1.9.2p0 で動作確認しています。
自分で動かすのが面倒な人用の動画。
FAQ
- Q. 出力が自分自身じゃないから Quine じゃないだろう?
- A. 厳密には Quine 生成器です。以下のように動かしてみてください。tmp1.rb が Quine になっていることがわかります。
$ ruby quinemas2010.rb 0 > tmp1.rb $ ruby tmp1.rb 0 > tmp2.rb $ diff tmp1.rb tmp2.rb
- Q. どうやってアニメーションしてるの?
- Q. どうやって音を出してるの?
- A. 過去の日記 を参照。
トラックバック - http://d.hatena.ne.jp/ku-ma-me/20101224/p1
リンク元
- 174 http://twitter.com/
- 54 http://reader.livedoor.com/reader/
- 32 http://hootsuite.com/dashboard
- 30 http://longurl.org
- 26 http://mamememo.blogspot.com/2010/09/qlobe.html
- 19 http://www.rubyist.net/~kazu/samidare/
- 17 http://mamememo.blogspot.com/2010/12/merry-quine-mas-2010.html
- 16 http://twtr.jp/home
- 15 http://t.co/oGzfg5ii
- 15 http://www.google.com/reader/view/

