Quine ruBy JavaScript版

Quine ruBy - まめめも
への挑戦。
Quine ruBy Perl版 - すぎゃーんメモ
に引き続き、JavaScript版。

     eval                                       ($a=
     'a=1;p=                                 this[1\
      &&"alert"                           ]?(a=0+0\
      )  ||alert:1     &&this["p"+     "rint"]?(  \
       1  &&print):console.log,u=unescape,q=u((  \
       0    ||"%27")),f=Function,x=f("t,n","v    \
        = [];while(n--)v+=t;return"+(s=u("%20") \
        )+"v"),n=u("%0a"),r=[45,95,145,194,243,1\
        +290,339,387,436,486,537,589,642,695,749\
       ,53 +750,858,913,969];for(i=19;i--;)$a= $a\
      [(e ="replace")](RegExp(".{"+r[i]+"}"),"" +(\
     "$&" )+(b=     u("%5c"))+n);if(a     ){c=[ 5,(\
    45), 5,55,    2, 31,58,43,2,31,(    58 ),53, 1,(\
   30),( 86),(       58),43,1,30,86,       58,53 ,5,(\
   45),5 ,28],o     =521;for(i=26;i--     ;){$a= $a[e\
  ](($a) .substr(0,o+c[i]%28),"$&"+u("%1b")+"["+ (d=[(\
  "0"),( "48;5;9"),"48;5;1","48;5;15"][Math["fl" +"oo"\
 +"r"](c[ i]/28)])+"m");  ;   o  +=c[i]%28+3+d. length}\
 };p(x(s   ,5)+"eval"+x(s   ,   39)+"($a="+n+x   (s,5)+\
q+$a+q+n    +"."+e+x(s,11)+"(/"+b+("x1b")+b+(    "[.*?"+\
"m/mig,"       +"/*")+x(s,11)+"qb*/"+q+q+(       "))"));'
.replace           (/\x1b\[.*?m/mig,/*           qb*/''))

https://gist.github.com/980193


ブラウザでは同じものを普通にalert。

Quine - jsdo.it - share JavaScript, HTML5 and CSS

Quine (write to <pre>) - jsdo.it - share JavaScript, HTML5 and CSS


コマンド実行の場合は目の色だけ変えるように。台詞つけるのは僕の腕では無理でした…

$ js --version
JavaScript-C 1.8.0 pre-release 1 2007-10-03
usage: js [-zKPswWxCij] [-t timeoutSeconds] [-c stackchunksize] [-o option] [-v version] [-f scriptfile] [-e script] [-S maxstacksize] [scriptfile] [scriptarg...]
$ wget jsdo.it/sugyan/quine/js -O qb.js 
$ cat qb.js
$ js qb.js
$ js qb.js | js


ruby, perlと比べてヒアドキュメント的なの書けないしで大変。結局末尾にバックスラッシュで文字列を繋げるという逃げ方をしてしまった。