今夜は W. V. Quine の命日です。
eval$s=%q(eval((%w(A="+_Sing_do,_re,_mi_to_the_mike!*z+_Do!*{+_Re!*|+_Mi!__OK !_Let's_sing_Silent_Night!*~+_Sxi~lent_|night!_~Hxo~lY_|night!*{+_All_is_ycal m,_zall_is_~bright,*x+_Round_You_zViyrxgin_~Moxther_~and_|Child!*x+_HolY_ziny fant_xso_~tenxder_~and_|mild,*{+_Sleep_in_}heav{enylY_zpea|ce,*z+_Slee~p_|in_ ~heav}en{lY_zpeace.**";T=-Math::PI/N= 2**10;F=proc{|n,t,a|n/=2;r=(0. .n-1);n<1?(a):(F[n,t*2,r.map{|i| a[i]+a[i+n]}].zip(F[n,t*2,r .map{|i|(a[i]-a[i+n])*Comple x.polar(1,t*i)}]).flat ten)};u=open("/dev/ds p","rb"){|s|loop{u||= [1,3,4,6,8,10,11][( A.slice!(/([!-w]+)([x -~])?/);$><<$1.tr(" Y*_+","y"<<10<<32<<35 );$2||(c=1614776052 204941692509352;s=["e val$s=%q("+$s+")",r= "#" *2,"Yusuke","Endoh,", 2011,r]*32.chr;s[i=34 9]. ord>31&&"5i=bFV0IS3 HS4GS5FT6>-.U7<-0T8:,2 T: 7,2V:5-0Z;0f>g<j8* ".each_byte{|d|s[i,0]=" \e [%dm"%[0,41,47][c% 3];c/=3;i+=d-38};puts(s); exi t);$2.ord-121)];i=j =k=m=0;w=s.read(N).unpack("C *").map{|v|v-=128.0;m+=v*v*2 ;v};g=h=0.0;e=[];F[N*2,-T,F[N*2 ,T,w+[0.0]*N].map{|v|v.abs2 }].map{|v|v.real/N/2}[0,N].map{|v |v=2*v/m;m-=w[i]**2+w[-i+=1 ]**2;v}.each_cons(3){|x,y,z|j+=1;x>0 &&(0>=y&&(e<<[k*11,h];g<h&&g =h;h=0.0);y-x>0&&z-y<=0&&(d=(x-z)/t=2*(x-2*y+z);(h<c=y-t*d*d/4)&&(k,h=j+d,c)) )};k,v=e.find{|i,v|v>g*0.9};k&&k>0&&v>0.9&&99<k&&k<2E3&&(((u-Math.log(25/k,2) *12)%12).abs<2.0&&u=$a)}})*"").gsub(/\e\[\d+m/,""))) ## Yusuke Endoh, 2011 ##
カラオケ機能のついた Quine です。/dev/dsp とマイクが必須です。
実行したらまずド、次にレ、最後にミの音を出してみて、音を確認してください。そのあと、「きよしこの夜」をゆっくり歌ってください。音に合わせて歌詞が出るはず (バッファリングのせいで結構遅れます) 。
音が外れたり認識できなかったりすると歌詞が進みませんので、そこから歌いなおしてください。最後まで進んだら Quine になります。
動画は後日。