http://shinh.skr.jp/dat_dir/poly_quine.txt
基本的には上記 4言語の Polyglot quine 。あとまぁ C と PHP でも Quine になる。あなごるだと m4 なんかもまぁ。 C++ が標準準拠してない気がするので気になるなら main に int をつけると良い。
実行は以下みたいな。
i@colinux ~/wrk/ag> diff poly_quine.txt =(gcc -xc =(php =(perl =(python =(ruby poly_quine.txt))));./a.out) i@colinux ~/wrk/ag>
はてなのシンタクスハイライト (vim のなんだっけ) を試してみる。
#include/* s='''*/<stdio.h> main(){char*_;/*==;sub _:lvalue{$_}<<_;#';<<_#''' _=0 def printf(a,*b): print a%b, _ #*/ _=" #include/*%cs='''*/<stdio.h>%cmain(){char*_;/*==;sub _:lvalue{%c_}<<_;#';<<_#'''%c_=0%cdef printf(a,*b):%c print a%%b,%c_%c#*/%c_=%c%s%c;printf(_,10,10,36,10,10,10,10,10,10,34,_,34,10,10,10,10,10,10);%c#/*%cs='''==;%c__END__%c*/%c}//'''%c";printf(_,10,10,36,10,10,10,10,10,10,34,_,34,10,10,10,10,10,10); #/* s='''==; __END__ */ }//'''
#include/* s='''*/<stdio.h> main(){char*_;/*==;sub _:lvalue{$_}<<_;#';<<_#''' _=0 def printf(a,*b): print a%b, _ #*/ _=" #include/*%cs='''*/<stdio.h>%cmain(){char*_;/*==;sub _:lvalue{%c_}<<_;#';<<_#'''%c_=0%cdef printf(a,*b):%c print a%%b,%c_%c#*/%c_=%c%s%c;printf(_,10,10,36,10,10,10,10,10,10,34,_,34,10,10,10,10,10,10);%c#/*%cs='''==;%c__END__%c*/%c}//'''%c";printf(_,10,10,36,10,10,10,10,10,10,34,_,34,10,10,10,10,10,10); #/* s='''==; __END__ */ }//'''
#include/* s='''*/<stdio.h> main(){char*_;/*==;sub _:lvalue{$_}<<_;#';<<_#''' _=0 def printf(a,*b): print a%b, _ #*/ _=" #include/*%cs='''*/<stdio.h>%cmain(){char*_;/*==;sub _:lvalue{%c_}<<_;#';<<_#'''%c_=0%cdef printf(a,*b):%c print a%%b,%c_%c#*/%c_=%c%s%c;printf(_,10,10,36,10,10,10,10,10,10,34,_,34,10,10,10,10,10,10);%c#/*%cs='''==;%c__END__%c*/%c}//'''%c";printf(_,10,10,36,10,10,10,10,10,10,34,_,34,10,10,10,10,10,10); #/* s='''==; __END__ */ }//'''
#include/* s='''*/<stdio.h> main(){char*_;/*==;sub _:lvalue{$_}<<_;#';<<_#''' _=0 def printf(a,*b): print a%b, _ #*/ _=" #include/*%cs='''*/<stdio.h>%cmain(){char*_;/*==;sub _:lvalue{%c_}<<_;#';<<_#'''%c_=0%cdef printf(a,*b):%c print a%%b,%c_%c#*/%c_=%c%s%c;printf(_,10,10,36,10,10,10,10,10,10,34,_,34,10,10,10,10,10,10);%c#/*%cs='''==;%c__END__%c*/%c}//'''%c";printf(_,10,10,36,10,10,10,10,10,10,34,_,34,10,10,10,10,10,10); #/* s='''==; __END__ */ }//'''