研究室のロゴをPolyglotなQuineにしてみた
Quineだけじゃ物足りないので、Polyglotにしてみた。
さっきのプログラムと一緒でperlで処理すると自分自身を再生成。rubyで実行すると僕の研究室の英語表記を表示してくれるという英語圏の人にも優しい親切設計になっています。
q= "a bc de fghijk "; eval(%w|pu ts("Knowle dg e@ Sy st em @L ab or atory".gsu b(/@/, 32.chr )) |. join); ;; %w!==~/^/m ;; $z =$ '; $_ =q {$ z= ~s /\s//gm;@a =s pl it (//,"q=$z==~/^/m ;;\$z=\$'; \$ _=q{$_ }; ". '$ _= ~s /\ s/ /g m;eval #' .c hr(33) ); $l='Al5254 1E @E h5 21 Ae Ae A@ 15 64 4041E@b55A e0Ag0A @6521H a61C@b 55AiA@b552 24 12 Cb A@ 65 Ae 01 Ag A@ 51 644465A@5A g0 0A e5E@5A g44CbB gA@@Da FaKf A@ aAd2266K @aAd22Ai1AiA @aAd221Ga5G@BcFa44CdA@ Ae 22 Bb Cb Bd5A@14226 EdE@0122Ce CfA@0122605G@0122Ae5Af A@ 14 22 Ka K@ '; @b =s pl it (/ ,/,'AaAa,Aa,Ab ,A A,Ca,Ac,Ea');f or$i (0..6){$l=~s /$i/$b [$i]/g ;}$l=~ s/ ([ a- z] )/'. 'x(ord ($1) *2 -1 92 )/ge;$ l= ~s /([A-Z])/' *'x(ord($1 )*2-128)/g e; fo r$ i( sp lit(// ,$l)){ $o =" \n "; $o =c hr(32)if(' .' eq $i );$o=shift(@a) if (' *' eq $i ); pr in t$ o} "dummy du mm ydummydummydummydummyd "};$_=~s/\s//gm;eval#!
参考にしたページの変態度と比べればまだまだですね。
参考
今年の年賀状ネタ http://d.hatena.ne.jp/rofi/20110110/1294598847
RubyでうどんげQuine(とAA型Quineの作り方講座) http://d.hatena.ne.jp/mickey24/20100915/ruby_udonge_quine
polyglot 基礎の基礎 http://d.hatena.ne.jp/sugyan/20110306/1299418878