ダウンロードはこちらから。
Quine Tools @ GitHub(仮)
興味があれば遊んでみて欲しい。言語はRuby。入力にはUTF-8を想定しているので、ロケールがUTF-8じゃない人は適宜ソースをいじって頂きたい。
Quine Toolsには次の2つのプログラムが含まれている。
- jbanner.rb ... 日本語のbannerを表示するプログラム。BDF(ビットマップフォント)対応。
- quine-gen.rb ... bannerの入力を元にQuineを生成するツール。
この2つを組み合わせて次のように使う。
shell> jbanner.rb -f shnmk16b.bdf 自由 主義 | quine-gen.rb -s 2 | ruby | ruby eval$s=%w' requ ire" base 64"; requ ire" zlib ";b= "eJz tlv0 KgzA MxP/ f0+j7v9xWRlhSmw/1SMK2A0X a89c mp9Bt66VHM47U/tJ5x3Ev38n xKVm cXVE lx3p DW+ftqOHoo7/BsXKv4Hh1oXJHc VB1R TmoP qM43frz59gcL3fdgefcE5LTbU9 Sq/z Xs/z 57Pk nzom SpCu fo3+ Hw43 m2C5 /JTT Hr8v +kys 4liO bY+U wlM2 ZieQ iJ55 jpSr n+Wr H3FG cWF0 zh5TNQeWO4qzmeKcrOZQ+3cd 4Nof 3dHZ ezUv neKmu1vhUNy4sJyreYclDcnq fx+r 1BHO p4qo =";n =Zli b::Inflate.inflate(Base64. deco de64 (b));e=$s*5;o="eval$s=%w"< <39; j=-1 ;0.u pto( 72*7 5-1) {|i| o<<( (n[i ]==" 1"[0])?e[j+=1]:32);o<<(( i%72 ==71 )?10 :"")};o[-10,6]=""<<39<<" .joi n";p uts( o)#r equi re"b ase6 4";r equi re"z lib" ;b=" eJzt lv0K gzAM xP/f 0+j7 v9xW RlhS mw/1 SMK2 A0Xa 89cm p9Bt 66VH M47U /tJ5 x3Ev 38nx KVmc XVEl x3pD W+ft qOHoo7/BsXKv4Hh1oXJHcVB1 RTmoPqM43frz59gcL3fdgefcE5 LTbU9Sq/zXs/z57PknzomSpC ufo3+Hw43m2C5/JTTHr8v+kys4 liOb Y+Uw lM2Z ieQi J55j pSrn +WrH 3FGc WF0z h5TN QeWO 4qzm eKcr OZQ+3cd4Nof3dHZezUvneKmu1vhU Ny4s JyreYclDcnqfx+r1BHOp4qo=";n= Zlib::Inflate.inflate(Base64 .dec ode64(b));e=$s*5;o="eval$s=% w"<< 39;j =-1;0.upto(72*75-1){|i|o <<(( n[i]=="1"[0])?e[j+=1]:32 );o< <((i %72= =71) ?10: "")};o[-10,6]=""<<39<<".join";pu ts(o )#require"base64";require"zlib"; b="e Jztlv0 KgzA Mx P/f0 +j7v9x WRlh Sm w/1SMK2A0Xa89cmp9Bt66VHM 47U/tJ5x3E v38n xKVm cXVElx3pDW+ftqOHoo7/BsXK v4Hh1oXJHc VB1R TmoP qM43 frz5 9gcL 3fdg efcE 5LTb U9Sq /zXs/z57PknzomSpCufo3+Hw43m2C5/J TTHr 8v+kys4liObY+UwlM2ZieQiJ55jpSrn+ WrH3 FGcW F0zh 5TNQ eWO4 qzme KcrO ZQ+3 cd4N of3dHZezUv neKm u1 vhUN y4sJyreYcl Dcnq fx +r1B HOp4qo=";n=Z lib: :Inf late .inflate(Bas e64. deco de64(b));e=$s*5;o="eval$s=%w"<<3 9;j= -1;0.u pt o( 72*75-1){|i|o<<((n[i]=="1"[0])?e [j+= 1]:32) ;o << ((i%72 ==71)? 10:"") };o[-1 0,6]=" "<<39< '.join空白で改行が入るのは仕様だ。気に入らなかったら直して欲しい。
なぜ標準入力をrubyへ2回つないでるかというのは、Quineとしてちゃんと機能しているかどうかを確かめるため。ちなみに、bannerの文字数が少ないとQuine全体をプログラム中に埋め込むことが出来ずにエラーになってしまうので、メッセージを長くする必要があるのだが、どうしても短いものを表示したい場合にはquine-gen.rbの-sオプションを使って倍率を指定すると良い。
また、jbanner.rbはBDFファイルをオプションで指定する必要があるのだが、BDFファイルはこのページなどから入手可能である。上記の例では「東雲16ドットフォント」をありがたく利用させて頂いた。
jbanner.rbは半角文字には対応していないので、アルファベットなどを使いたい場合には通常のbannerコマンドと組み合わせるといいようになっている。
shell> banner Ruby de Quine | quine-gen.rb -s 2 | ruby | ruby eval$s=%w' require"base 64";require" zl ib "; b= "eJztllEOg CA Ih t8 7j d3 /c q05FyDkFqC /W zy R0 qe AI qX gy 0n kg CV K/ Rl p3 03 kP /o e1 hB 721uzopRBlF6 Nv a6 jVh4ziDqHE vu ZNUSbjUSkTJ6 pb 5m JI8ZUh5/YR 95 fg zO IX PO /D jO I3 pd sB nG HO CI S0 e/ Mb rU ni h5 NH Hd SU rd vb d0 TB pH 3C jJ aG ER uKTObR5R 270Rur3sdT 7S 7P dt uFpH2dnq 3Z6+jn/B44 h7 1EV8uBj8bX g==";n=Zlib: :Inflate.i nflate(Base6 4. de co de 64 (b )) ;e =$s*5;o="e va l$ s=%w"<<39; j= -1 ;0 .u pt o( 82 *5 3- 1) {| i| o<<((n[i]= ="1"[0])?e[j +=1]:32);o <<((i%82==81 )?10:"")}; o[-10,6]=" "< <3 9< <" .j oi n" ;puts(o)#req ui re "b as e6 4" ;r equire"zlib" ;b =" eJ zt ll EOgC AI ht 87 jd 3/ cq 05 FyDk Fq C/ Wz yR 0q eA Iq Xg y0 nk gCVK/Rlp30 3k P/ oe 1h B7 21 uz op RBlF6Nva6j Vh 4z iD qH Ev uZ NU Sb jU Sk TJ 6p b5 mJ I8 ZU h5 /Y R9 5f gz OI XP O/ Dj OI 3pds Bn GH OC IS 0e /M br Unih 5N HHdSUrdv bd 0TBpH3Cj Ja GE Ru KTObR5R270Ru r3sdT7S7 Pd tuFpH2dn q3 Z6 +j n/B44h71EV8u '.join
Enjoy!!
0 件のコメント:
コメントを投稿