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 a
print "EOF\n"
print a
EOF
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,2
puts <<2*2,2
2
非常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 c
puts 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)"
end
end
encodedBody="cmVxdWlyZSAiYmFzZTY0IgoKY2xhc3MgUXVpbmUKICAKICBkZWYgZG9Tb21l
dGhpbmcob3BlcmF0aW9uKQogICAgIHB1dHMgIiN7QmFzZTY0LmRlY29kZTY0
KG9wZXJhdGlvbil9CiAgICAgZW5jb2RlZEJvZHk9XCIje29wZXJhdGlvbn1c
IgogICAgIFF1aW5lLm5ldy5kb1NvbWV0aGluZyhlbmNvZGVkQm9keSkiCiAg
ICBlbmQKZW5k"
Quine.new.doSomething(encodedBody)
添一个最短的
puts File.read(__FILE__)
分享到:
- 2009-06-27 02:47
- 浏览 1207
- 评论(5)
- 论坛回复 / 浏览 (5 / 2693)
- 查看更多
相关推荐
radiation-hardened-quine, 在删除任何一个字符之后,一个稳定的quine程序可以 辐射强化 Quine这是一个用编写的健壮的自签名自适应打印程序。 即使你从代码中删除了一个字符,它也能工作。:如何播放正常使用运行 ...
用C++实现Quine-McCluskey算法,输入模式为最小项的输入(输入最小项),本程序目前最大支持6个变量的化简,自己编写的程序~输出格式也是以最小项的模式,输出中的' -'表示这个变量不用显示,' 1' 代表最小项中有...
布尔代数通用化简方法Quine-McCluskey算法的C++实现,可用于电子电路逻辑门设计的优化
该文件是利用Quine-McClusky算法实现计算机逻辑化简功能,共包含C++、C、python三种语言实现代码,且三种的数据结构和中间算法均不相同。每个均包含实验报告和代码,是非常好的学习数字电路中的计算机辅助逻辑化简。...
Quine-McCluskey算法(也称为QMC算法)是一种简化布尔表达式的方法,用于减少布尔函数的项数,从而提高逻辑电路的设计效率。在计算机科学和电子工程领域,这个算法尤其重要,因为它能够帮助优化逻辑设计,降低硬件...
自產生程式(Quine),它以哲學家奎恩命名,指的是輸出結果為程式自身源碼的程式 能夠直接讀取自己源碼、讀入使用者輸入或空白的程式一般都不視為自產生程式。
通过简单的Ruby接口,开发者可以轻松地在应用程序中集成和操作数据库,适用于各种需要快速存取非结构化数据的场景。深入研究QuineDB不仅可以提升数据库管理技能,也有助于更好地理解和利用Ruby语言的优势。
首先输入需要合并的小项数目,然后输入具体的小项,如WxY可以表示101(其中小写字母为取补,用0表示) 例如,先输入小项数目4; 接下来输入101,001,111,000,表示:WxY+wxY+WXY+wxy 如果输出结果为空白,表示...
《C#实现Quine-McCluskey算法详解》 Quine-McCluskey算法,简称QMC算法,是一种用于简化布尔表达式的方法,它主要用于逻辑设计中的化简问题,帮助减少逻辑门的数量,提高电路效率。在C#编程语言中实现QMC算法,可以...
Quine-McCluskey(简称QMC)算法是一种用于化简布尔表达式的经典方法,尤其在数字逻辑设计和计算机科学领域中广泛应用。这个算法主要用于找出一个布尔函数的最简与或表达式,即找到最少的基元事件来表示原布尔表达式...
Quine-McCluskey 最小化布尔表达式的Quine McCluskey方法的代码。 使用的语言:JAVA如何编译和运行:使用任何Java IDE(BlueJ,eclipse等)打开源文件。 编译代码并运行。 变量数量主要是一个输入。 最小项的数量和...
奎因-麦克拉斯基(Quine-McCluskey,简称QMC)算法是一种用于化简布尔函数的主要方法,尤其在数字逻辑设计和计算机科学中广泛使用。它通过消除冗余项来找到一个布尔表达式的最简与或式,帮助减少逻辑电路的复杂性和...
**DR_QUINE:C和ASM中的QUINES** "DR_QUINE"是一个项目,专注于探索编程语言中的自复制程序,也就是我们常说的"quine"。Quine是一种特殊的计算机程序,它能够打印出自己的源代码,而无需从外部读取任何输入。在本...
Quine-McCluskey算法是一种用于化简布尔表达式的方法,主要应用于计算机科学和电子工程领域,特别是在逻辑设计和简化数字电路时。这个算法通过消除冗余项和等价类来实现布尔表达式的最简形式。在Java编程语言中实现...
Quine-McCluskey(Q-M)算法是一种在数字逻辑设计中用于简化布尔函数的高效方法。这个算法主要用于减少布尔表达式的项数,从而优化逻辑电路,减少硬件资源的使用,提高系统的运行效率。在计算机科学和电子工程领域,...
这是一个生成Rust程序的Ruby程序,该生成Rust的程序生成Scala程序,该Scala程序生成...(总共通过128种语言)。REXX程序再次生成原始Ruby代码。 (如果要查看旧的50语言版本,请参阅分支。) 用法 的Ubuntu 如果您...
`String` 是可变的、动态大小的字节数组,可以方便地进行各种字符串操作。但是,为了创建奎因,我们需要避免直接引用源代码文件,而是要通过运行时的代码生成来实现。 实现奎因的一种常见方法是将整个源代码作为...
奎因-麦克拉斯基 Quine–McCluskey 算法(或质蕴涵项的方法)是一种用于最小化布尔函数的方法,由 WV Quine 开发并扩展为爱德华 J.麦克拉斯基。[1][2][3] 它在功能上与卡诺映射相同,但表格形式使其更有效地用于...
Quine-McCluskey算法,也称为质蕴涵法,是布尔逻辑中的一种经典算法,主要用于简化布尔表达式,即找到布尔函数的最简与或形式。在数字电路设计、逻辑设计和计算机科学中,这个算法具有重要的应用价值,因为它能够...
自產生程式(Quine),它以哲學家奎恩命名,指的是輸出結果為程式自身源碼的程式 能夠直接讀取自己源碼、讀入使用者輸入或空白的程式一般都不視為自產生程式。