D码点评:12 自食
语言的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
巡阅
- 150113 Zoom.Quiet checked
声明: 本文采用 BY-NC-SA 授权。转载请注明转自: #ZHGDG#
以上...
加入 珠海GDG
- 注册 Meetup
- 关注 Zhuhai GDG
- 或扫描:
通过 珠海GDG 可以:
第一时间获知谷歌最新技术, 可以学到如何去谷歌平台上赚钱的思路和方法, 可以认识很多有可能将来一起走上自己创业道路的人, 可以学会把你的创新带向国际市场, 参加那里的活动有经常和国际上的开发者们进行交流的机会...
PS:
若无意外,题图都是从原文提取或是通过 Google 图片搜索出来的, 版权属左, 不负责任 ;-)
PPS:
珠海GDG 微信/Blog 欢迎投稿,只要追自认内容吻合以下条件:
0. 有趣 ~ 至少是自个儿有兴趣的领域吧... 1. 有料 ~ 至少有点儿原创的东西吧.. 2. 有种 ~ 至少不能是成功学吧!
有好物请及时通过邮件列表投稿成也:
[email protected]
(发空邮件到 [email protected] 即完成订阅)
微信公号
栏目设定:
G术图书 (gb:推荐好书,书无中外) D码点评 (dd:麻辣评点,善意满盈) G说公论 (gt:时评杂文,新旧不拘) 珠的自白(dm:大妈自述,每周一篇) 海选文章(hd:得要相信,大妈法眼)
总之, 请大家告诉大家, 珠海生活中的技术社区
都来订阅呗 ;-)
订阅方法
- 搜索微信号
GDG-ZhuHai
- 或查找公众号:
GDG珠海
- 或扫描:
GDG珠海 社区资源:
- 邮件列表: [email protected] (可发空邮件到 [email protected] 即完成订阅)
- 微信: GDG珠海
- 博客: 珠海GDG | GDG Livin ZhuHai Life;-)
大妈的多重宇宙 - YouTube
全新自媒体系列...科学幻想,读书,说故事...任何问题
随时邮件提问可也:[email protected]