layout: post author: zoomq title: D码点评:12 自食 description: ~ 麻辣评点,善意满盈 categories: gDgcoDe tags: gdg D码点评 dd wechat coding
语言的quine接力
q a b c=putStrLn $ b ++ [toEnum 10,'q','('] ++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']main=q "q a b c=putStrLn $ b ++ [toEnum 10,'q','('] ++ show b ++ [','] ++ show c ++ [','] ++ show a ++ [')']" "def q(a,b,c):print b+chr(10)+'q('+repr(b)+','+repr(c)+','+repr( a)+')'" "def e(x) return 34.chr+x+34.chr end;def q(a,b,c) print b+ 10.chr+'main=q '+e(b)+' '+e(c)+' '+e(a)+' '+10.chr end"
介什么东西呢?
这是一个Haskell程序源码,运行一下可以得到一个Python程序源码,再运行一下这个Python程序,可以得到一个Ruby程序源码,再运行一下这个Ruby程序可以得到最开始的Haskell程序源码. 这就是triple quine!!!
11门语言 Quine
后来: http://d.hatena.ne.jp/ku-ma-me/20090916/p1
# 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+"\"-- haskell"+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+"\"brainfuck"+l*64+"n++++++++[>++++<-]+++++++++>> ++++++++++"+l*31+"\"++(concat(snd(mapAccumL h 2( "+l*31+"\"110"+l*31+"\"++g(length s) ++"+l*31+"\"22111211100111112021111102011112120012"+l*31+"\"++concatMap( "+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+"\"2100211101012021122221121110100 0120211021120221102111000110120211202"+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=Nothing;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"
是这11门语言的quine:
- 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
卧槽. . . . HOLYFUCK!
mame/quine-relay
现在:
$ sudo apt-get install algol68g bash beef boo clisp clojure1.4 \ coffeescript f2c fp-compiler g++ gauche gawk gcc gforth gfortran ghc \ gnat gnu-smalltalk gobjc golang groovy icont intercal iverilog \ jasmin-sable llvm lua5.2 make mono-devel mono-mcs nodejs ocaml octave \ open-cobol openjdk-6-jdk parrot perl php5-cli pike7.8 python r-base \ regina-rexx ruby1.9.3 scala swi-prolog tcc tcl8.5 ucblogo valac
然后就可以开始:
$ ruby QR.rb > QR.scala $ scalac QR.scala && scala QR > QR.scm $ $(SCHEME) QR.scm > QR.bash $ bash QR.bash > QR.st $ gst QR.st > QR.tcl $ tclsh QR.tcl > QR.unl $ ruby unlambda.rb QR.unl > QR.vala $ valac QR.vala && ./QR > QR.v $ iverilog -o QR QR.v && ./QR -vcd-none > QR.ws $ ruby whitespace.rb QR.ws > qr.adb $ gnatmake qr.adb && ./qr > QR.a68 $ a68g QR.a68 > QR.awk $ awk -f QR.awk > QR.boo $ booi QR.boo > QR.bf $ beef QR.bf > QR.c $ ${CC} -o QR QR.c && ./QR > QR.cpp $ ${CXX} -o QR QR.cpp && ./QR > QR.cs $ mcs QR.cs && mono QR.exe > QR.clj $ clojure QR.clj > QR.cob $ cobc -O2 -x QR.cob && ./QR > QR.coffee $ coffee QR.coffee > QR.lisp $ clisp QR.lisp > QR.fs $ gforth QR.fs > QR.f $ f2c QR.f && ${CC} -o QR QR.c -L/usr/lib -lf2c && ./QR > QR.f90 $ gfortran -o QR QR.f90 && ./QR > QR.go $ go run QR.go > QR.groovy $ groovy QR.groovy > QR.hs $ runghc QR.hs > QR.icn $ icont -s QR.icn && ./QR > QR.i $ ick -bfO QR.i && ./QR > QR.j $ jasmin QR.j && java QR > QR.java $ javac QR.java && java QR > QR.ll $ llvm-as QR.ll && lli QR.bc > QR.logo $ logo QR.logo > QR.lua $ lua QR.lua > QR.makefile $ make -f QR.makefile > QR.il $ ilasm QR.il && mono QR.exe > QR.js $ $(NODE) QR.js > QR.m $ gcc -o QR QR.m && ./QR > QR.ml $ ocaml QR.ml > QR.octave $ octave -qf QR.octave > QR.pasm $ parrot QR.pasm > QR.pas $ fpc QR.pas && ./QR > QR.pl $ perl QR.pl > QR.php $ php QR.php > QR.pike $ pike QR.pike > QR.prolog $ swipl -q -t qr -f QR.prolog > QR.py $ python QR.py > QR.R $ R --slave < QR.R > QR.rexx $ rexx ./QR.rexx > QR2.rb
是的,50门开发语言的 Quine !!!
而且! 一切的开始,那段 Ruby 脚本本身是一幅 ASCIIART 的图标!!!
是也乎
一段程序的运行结果是打印自身的所有文本, 然后,一段程序运行的结果是打印出另外一种语言的代码,然后,再运行....
这么玩有意思嘛?! 亲
!
实现原理有讨论: Quine Relay是如何做到以字母顺序依次生成50种语言代码,最后回到原始程序代码的? - 知乎
而意义也早已有讨论: 打印自身的程序杂谈
而其实,最直接的原因仅仅是:
We use it just because we can, muggle!
太多事儿,不是必须知道有什么用,才进行的 ;-)
当期活动 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
珠海GDG[11.23]珠三角技术沙龙HOA.5
和久违的珠三角技术沙龙的小伙伴,共同来GDG 分享!
内容(可能):
- Jeff小乐队 PyCon2013China 开场曲目内部练习
- iFanr 编辑一斌 有关跨界成长的体验
- 北理工学生有关 TI SensorTag 试玩体验
- Leo ~ 文学化编程再再再谈
- AngularJS 现教现用
- Web的未来-新语言和新技术
- GLASS生态...
其它征集中...
筹备活动 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PyCon2013CHina 珠海场
- Python 年度大会
- Pythonner 大趴
- Pythonista 相亲集会
- Pythonic 体验交流
请及时举报你身边的 华蠎行者! 举报热线: zoomquiet+pycon (AT) gmail.com
以上...
码不停提马上无虫 ;-)
|_|0|_| |_|_|0| |0|0|0|
加入 珠海GDG
- 注册 G+
- 关注 GDG Zhuhai
- 成为 GDG Zhuha开发者
通过 珠海GDG 可以:
第一时间获知谷歌最新的技术, 可以学到如何去谷歌平台上赚钱的思路和方法, 可以认识很多有可能将来一起走上自己创业道路的人, 可以学会把你的创新带向国际市场, 参加那里的活动有经常和国际上的开发者们进行交流的机会...
PS:
若无意外,题图都是从原文提取或是通过 Google 图片搜索出来的, 版权属左, 不负责任 ;-)
PPS:
珠海GDG wechat/Blog 都是欢迎投稿的,只要追认内容吻合以下条件:
0. 有趣 ~ 至少是自个儿有兴趣的领域吧... 1. 有料 ~ 至少有点儿原创的东西吧.. 2. 有种 ~ 至少不能是成功学吧!
有好物的,及时向大妈们吼: [email protected]
微信栏目
当前应该是:
G术图书 (gb:推荐好书,书无中外) D码点评 (dd:麻辣评点,善意满盈) G说公论 (gt:时评杂文,新旧不拘) 珠的自白(dm:大妈自述,每周一篇) 海选文章(hd:得要相信,大妈法眼)
总之! 珠海的组委大妈们,决定开始坚持发文,方方面面细细同大家分享/交流
总之! 请大家告诉大家, 珠海生活中的技术社区
已经认真回归 微信,都来订阅吧!
订阅方法
- 搜索微信号
GDG-ZhuHai
- 或查找公众号:
GDG珠海
- 或扫描:
GDG珠海 社区资源:
- 邮件列表: [email protected] (可发空邮件到 [email protected] 即完成订阅)
- 微博: @GDG珠海
- 微信: GDG珠海
- G+ 主页: GDG ZhuHai
- G+ 社群: ZhuHai GDG
Author: /mail / gittip / github