Polyglot Quine

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 のなんだっけ) を試してみる。

C++

 #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__
*/
}//'''

Ruby

 #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__
*/
}//'''

Python

 #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__
*/
}//'''

Perl

 #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__
*/
}//'''
なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h