Tonight is the eve of the anniversary of W. V. Quine's death. (in Japanese time zone :-)
%;';;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'''''''''''''''''''''''''
Save the code as "quinemas2010.rb" and run it under an terminal bigger than 80 x 24. You can use cygwin if you're a windows user. You may need to use "aoss" or "padsp" if you're using Un*x. I tested it with ruby 1.8.7p299 and 1.9.2p0.
A screencast for you guys who are lazy:
FAQ
- Q. Is this a pseudo-Quine because its output is not strictly equal to the code?
- A. Yes. This is a Quine generator. Run it as follows. You'll find tmp1.rb is certainly a Quine.
$ ruby quinemas2010.rb 0 > tmp1.rb $ ruby tmp1.rb 0 > tmp2.rb $ diff tmp1.rb tmp2.rb
Q. What does the command line argument mean?
- A. A random seed which affects how to snow.
Q. How does it animate?
- A. It just prints each frame with the aid of escape sequence. Because it uses only ANSI escape code, it works on almost all terminal emulator (but not cmd.exe).
Q. How does it play a sound?
- A. It writes a sound wave directly to /dev/dsp (see Open Sound System).
translated from mamememo in Japanese (2010-12-24).