标题: 批处理奎因 (Quine) 自产生程序 [打印本页]
作者: neorobin 时间: 2012-5-2 16:31 标题: 批处理奎因 (Quine) 自产生程序
本帖最后由 neorobin 于 2012-5-2 16:32 编辑
奎因 (Quine) 是这样一种计算机程序,不读取任何输入,并只会输出一个它自身源代码的副本.
这种程序在可计算性理论和计算机科学文献中的标准术语是自产生程序.
本文给出一个 109 字节的批处理奎因程序, 请用下面的命令运行它, 以确保 延迟变量扩展 被禁用 以及 ECHO 处于关的状态.- Cmd /Q /V:Off /C BatchQuine.bat
复制代码
下面是批处理奎因代码, 同时也是它输出的内容.
如果将输出重定向到一个文件, 那么生成的文件将是 109 字节, 而下面的代码如果第 3 行没有最后的一对 CR LF 字符, 将少 2 个字节, 即只有 107 个字节.
但无论是否存在最后的一对 CR LF 字符, 输出都将是 109 字节.- Set "T=Echo Set "T=!T!"&Call Echo Set E=!E!E!E!!E!E!E!&Echo Cmd/V:On/C"!E!T!E!""
- Set E=%%
- Cmd/V:On/C"%T%"
复制代码
转自 dostips
http://www.dostips.com/DtTipsQuine.php
关于奎因:
http://en.wikipedia.org/wiki/Quine_(computing)
http://zh.wikipedia.org/wiki/自產生程式
作者: CrLf 时间: 2012-5-2 18:10
有趣,不过不明白这目的何在呢?
另,是否应声明是在 cmd 窗口中黏贴执行?
作者: gawk 时间: 2012-5-2 18:42
复制代码
复制代码
- @echo off
- findstr .* "%~0"
复制代码
作者: neorobin 时间: 2012-5-2 19:04
回复 2# CrLf
这里的奎因代码, 要以批处理文件的方式运行, 不能粘贴到命令行去运行, 那样得不到和自身一样的输出
下面的代码可以生成这个奎因代码, 显示它的内容, 运行它输出结果, 最后将奎因代码的 输出文件 和 奎因代码 自身进行比较, 检测 是否完全一致:- @echo off & endlocal
- set "Quine=BatchQuine.bat"
- set "Output=Output.bin"
-
- call :genQuine
- echo TYPE %Quine%:
- type %Quine%
- echo.
- pause > nul
- echo %Quine% OUTPUT:
- call %Quine%
- pause > nul
- echo.
- echo TEST whether the output is SAME to the source code:
- call %Quine% > %Output%
- echo fc /b %Output% %Quine%
- fc /b %Output% %Quine%
- pause > nul
- exit
-
- :genQuine
- > %Quine% (
- echo Set "T=Echo Set "T=!T!"&Call Echo Set E=!E!E!E!!E!E!E!&Echo Cmd/V:On/C"!E!T!E!""
- echo Set E=%%%%
- echo Cmd/V:On/C"%%T%%"
- )
- exit /b
复制代码
作者: neorobin 时间: 2012-5-2 19:06
回复 3# gawk
的确输出了自身, 这一点符合, 但违背了奎因自产生程序的另一点: 不读取任何输入
作者: email10t 时间: 2015-3-3 00:09
本帖最后由 email10t 于 2015-3-3 11:52 编辑
回复 5# neorobin
所以不是奎因。!
因为 3楼的代码接收输入了!!!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |