the ruby code generates python code, which generates perl code, which ...
night_stalker
2009-09-29
http://d.hatena.ne.jp/ku-ma-me/20090916/p1 Quine 新境界 …… 11 种语言跑完变回最开始的代码。 引用 The Ruby code generates Python code,
which generates Perl code, which generates Lua code, which generates OCaml code, which generates Haskell code, which generates C code, which generates Java code, which generates Brainfμck code, which generates Whitespace code, which generates Unlambda code, which generates the original Ruby code again. 引用 # ruby l=92.chr;eval s="s=s.dump[r=1..-2].gsub(/("+l*4+"){4,}(?!\")/){|t|'\"+l*%d+\"'%(t .size/2)};5.times{s=s.dump[r]};puts\"# python\\nprint(\\\"# perl\\\\nprint(\\\\\\ \"# lua"+l*4+"nprint("+l*7+"\"(* ocaml *)"+l*8+"nprint_endline"+l*15+"\"-- haskel l"+l*16+"nimport Data.List;import Data.Bits;import Data.Char;main=putStrLn("+l*31 +"\"/* C */"+l*32+"n#include<stdio.h>"+l*32+"nint main(void){char*s[501]={"+l*31+ "\"++intercalate"+l*31+"\","+l*31+"\"(c(tail(init(show("+l*31+"\"/* Java */"+l*32 +"npublic class QuineRelay{public static void main(String[]a){String[]s={"+l*31+" \"++intercalate"+l*31+"\","+l*31+"\"(c("+l*31+"\"brainfμck"+l*64+"n++++++++[>++++ <-]+++++++++>>++++++++++"+l*31+"\"++(concat(snd(mapAccumL h 2("+l*31+"\"110"+l*31 +"\"++g(length s)++"+l*31+"\"22111211100111112021111102011112120012"+l*31+"\"++co ncatMap("+l*32+"c->let d=ord c in if d<11then"+l*31+"\"21002"+l*31+"\"else"+l*31+ "\"111"+l*31+"\"++g d++"+l*31+"\"22102"+l*31+"\")s++"+l*31+"\"2100211101012021122 2211211101000120211021120221102111000110120211202"+l*31+"\"))))))++"+l*31+"\","+l *63+"\""+l*64+"n"+l*63+"\"};int i=0;for(;i<94;i++)System.out.print(s[i]);}}"+l*31 +"\")))))++"+l*31+"\",0};int i=0;for(;s[i];i++)printf("+l*63+"\"%s"+l*63+"\",s[i] );puts("+l*63+"\""+l*63+"\");return 0;}"+l*31+"\");c s=map("+l*32+"s->"+l*31+"\"" +l*63+"\""+l*31+"\"++s++"+l*31+"\""+l*63+"\""+l*31+"\")(unfoldr t s);t[]=Nothing; t s=Just(splitAt(if length s>w&&s!!w=='"+l*31+"\"'then 501else w)s);w=500;f 0=Not hing;f x=Just((if x`mod`2>0then '0'else '1'),x`div`2);g x= reverse (unfoldr f x); h p c=let d=ord c-48in(d,replicate(abs(p-d))(if d<p then '<'else '>')++"+l*31+"\" ."+l*31+"\");s="+l*31+"\"# ruby"+l*32+"n"+l*31+"\"++"+l*31+"\"l=92.chr;eval s=\"+ (z=l*31)+\"\\\"\"+s+z+\"\\\""+l*31+"\"++"+l*31+"\""+l*32+"n"+l*31+"\""+l*15+"\""+ l*7+"\")"+l*4+"n\\\\\\\")\\\")\"########### (c) Yusuke Endoh, 2009 ###########\n" 注意:删掉换行,把 μ 替换成 u (该死的关键字过滤) 运行: $ ruby QuineRelay.rb > QuineRelay.py $ python QuineRelay.py > QuineRelay.pl $ perl QuineRelay.pl > QuineRelay.lua $ lua QuineRelay.lua > QuineRelay.ml $ ocaml QuineRelay.ml > QuineRelay.hs $ runghc QuineRelay.hs > QuineRelay.c $ gcc -Wall -o QuineRelay QuineRelay.c && ./QuineRelay > QuineRelay.java $ javac QuineRelay.java && java QuineRelay > QuineRelay.bf $ beef QuineRelay.bf > QuineRelay.ws $ wspace QuineRelay.ws > QuineRelay.unl $ unlambda QuineRelay.unl > QuineRelay2.rb 最后可以看看是不是一摸一样? $ diff QuineRelay.rb QuineRelay2.rb 搬运搬到底:推荐运行环境 * ruby 1.8.7-p72 * Python 2.5.2 * perl v5.10.0 * Lua 5.0.3 * OCaml 3.10.2 * ghc-6.8.2 * gcc 4.3.2 * java "1.5.0_17" * beef 0.0.6-2 * whitespace 0.3-2 * unlambda 2.0.0-5 |
|
iaimstar
2009-09-29
介个。。ns你都跑了一遍?
|
|
night_stalker
2009-09-29
iaimstar 写道 介个。。ns你都跑了一遍?
没呢 …… 新系统, ocaml、bf 和 ws 都没有,等 fx 跑一遍再说。 |
相关讨论
相关资源推荐
- C++中boost::iterator用法详解
- boost库容器之迭代器详细功能介绍,及所有容器使用示例
- boost::iterator_adaptor (II)
- 'boost/iterator/iterator_adaptor.hpp' file not found之xcode生成时报错的解决方案
- boost::iterator::is_lvalue_iterator用法的测试程序
- boost::iterator的用法测试实例
- 解决 'boost/iterator/iterator_adaptor.hpp' file not found’ 及控制台":CFBundleIdentifier", Does Not Exist...
- Xcode 10,11运行老版本React Native 报错 iterator_adaptor.hpp' file not found
- C++风格_Boost库
- ReactNative入门教程及遇到的坑