Merry Quine-mas 2011

今夜は 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 になります。

動画は後日。