六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 998|回复: 0

各种各样的 Ruby Quine

[复制链接]

升级  96%

12

主题

12

主题

12

主题

童生

Rank: 1

积分
48
 楼主| 发表于 2013-2-5 02:45:08 | 显示全部楼层 |阅读模式
Quine就是输出自身的程序,最早源自Ken Thompson 的一篇论文。
以后各种程序设计语言都会玩这个游戏。
Ruby以灵活著称,Quine能玩出多少花样呢?我收集了不少,研究这些代码一个是好玩,一个也能加深对RUBY理解。
printf(s = 'printf(s = %c%s%c, 39, s, 39)', 39, s, 39) 
s="s=%c%s%c; printf s,34,s,34,10%c"; printf s,34,s,34,10 
以上这两个是对C语言QUINE的直接改编,相对好理解。
a= <<'EOF'print "a=<<'EOF'"print aprint "EOF\n"print aEOF  print "a=<<'EOF'"  print a  print "EOF\n"  print a 
这个利用了HERE的语法特点,也好理解。
def x(s); puts %Q{#{s} x(%q{#{s}})}; end; x(%q{def x(s); puts %Q{#{s} x(%q{#{s}})}; end;}) 
这个不好懂,改编自一个LISP QUINE,应该是用到函数式程序的特点吧。
(lambda (x) (list x (list (quote quote) x))) (quote (lambda (x) (list x (list (quote quote) x))))) 一个非常简单的,但却没懂
puts <<2*2,2puts <<2*2,22 
非常CUTE,但查了<<用法,没对,分隔参数的处理讲的太清楚。谁理解了给说一下。
_="_=%p;puts _%%_";puts _%_ 
这个极短,%p用到了str.inspect特性。
x=%q/puts "x=%q\057#{x}\057;#{x}"/;puts "x=%q\057#{x}\057;#{x}" 
 利用了/ /,#{x}等特性
 再来个长的
$a=%w( def xx  $a.each do |x| if x =~ /xx/  print x+"\n" else print x, " " end end end; print "$a=%w( "; xx  print ")\n"; xx  )  def xx  $a.each do |x| if x =~ /xx/  print x+"\n" else print x, " " end end end; print "$a=%w( "; xx  print ")\n"; xx 来个对称的
a="a=%p\nb=%p\nc=%p\nputs a%%[a,b,c]\nputs c"b="c=%p\nb=%p\na=%p"c="puts b%[c,b,a]"puts a%[a,b,c]puts cputs b%[c,b,a]c="puts b%[c,b,a]"b="c=%p\nb=%p\na=%p"a="a=%p\nb=%p\nc=%p\nputs a%%[a,b,c]\nputs c" 
最后来个比较另类的
require "base64"class Quine  def doSomething(operation)     puts "#{Base64.decode64(operation)}     encodedBody=\"#{operation}\"     Quine.new.doSomething(encodedBody)"    endend     encodedBody="cmVxdWlyZSAiYmFzZTY0IgoKY2xhc3MgUXVpbmUKICAKICBkZWYgZG9Tb21ldGhpbmcob3BlcmF0aW9uKQogICAgIHB1dHMgIiN7QmFzZTY0LmRlY29kZTY0KG9wZXJhdGlvbil9CiAgICAgZW5jb2RlZEJvZHk9XCIje29wZXJhdGlvbn1cIgogICAgIFF1aW5lLm5ldy5kb1NvbWV0aGluZyhlbmNvZGVkQm9keSkiCiAgICBlbmQKZW5k"     Quine.new.doSomething(encodedBody) 
添一个最短的
puts File.read(__FILE__) 
 
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表