ダウンロードはこちらから。
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 コメント:
コメントを投稿