Skip to content

Latest commit

 

History

History
305 lines (196 loc) · 6.73 KB

File metadata and controls

305 lines (196 loc) · 6.73 KB

Quine 编程挑战

本文件列出了各种 Quine 相关的编程挑战,按难度分级。

🔰 入门级挑战

挑战 1:你的第一个 Quine

目标:用你最喜欢的语言写一个 Quine。

要求

  • 不接受任何输入
  • 输出与源代码完全相同的字符串
  • 使用标准输出

提示

# 模板:s='s=%r;print(s%%s)';print(s%s)
# %r 会添加引号并转义特殊字符

验证

python quine.py | diff - quine.py

挑战 2:无引号 Quine

目标:写一个 Quine,不使用显式的引号字符 "'

难度:⭐⭐

提示:使用 chr(34)chr(39) 构造引号。


挑战 3:单行 Quine

目标:写一个只有一行的 Quine。

难度:⭐


🏃 进阶级挑战

挑战 4:迭代 Quine (2-循环)

目标:写两个程序 A 和 B,使得:

  • A 运行输出 B 的源代码
  • B 运行输出 A 的源代码

难度:⭐⭐⭐

示例思路

# 程序 A
b_code = "..."  # B 的代码
print(b_code)

# 程序 B  
a_code = "..."  # A 的代码
print(a_code)

挑战 5:3-循环迭代 Quine

目标:写三个程序 A、B、C 形成循环:A→B→C→A

难度:⭐⭐⭐


挑战 6:多语言 Quine (2种语言)

目标:写一个文件,它既是语言 X 的 Quine,也是语言 Y 的 Quine。

难度:⭐⭐⭐⭐

推荐组合

  • Python 2 + Python 3
  • JavaScript + Python
  • C + Python

技巧:利用两种语言都忽略的字符或注释语法。


挑战 7:带注释的 Quine

目标:写一个 Quine,其中包含任意注释,但输出时不包含这些注释。

难度:⭐⭐⭐


🧠 高级挑战

挑战 8:衔尾蛇 Quine (Ouroboros)

目标:创建一个 5+ 语言的循环链。

语言链示例:Python → JavaScript → Ruby → Perl → C → Python

难度:⭐⭐⭐⭐⭐

当前记录保持者: Yusuke Endoh 的 128 语言 Quine Relay


挑战 9:回文 Quine

目标:源代码本身是回文的(正读反读相同),且是一个 Quine。

难度:⭐⭐⭐⭐⭐

要求

source == source[::-1]  # 是回文
exec(source) == source  # 是 Quine

挑战 10:抗辐射 Quine

目标:写一个 Quine,即使删除/修改任意一个字符,仍然输出正确的源代码。

难度:⭐⭐⭐⭐⭐

变体

  • 1-容错:容忍任意 1 个字符错误
  • 2-容错:容忍任意 2 个字符错误
  • k-容错:容忍任意 k 个字符错误

技巧:使用纠错码(Reed-Solomon, Hamming Code)。


挑战 11:自修改 Quine

目标:写一个程序,它:

  1. 输出自己的源代码
  2. 同时修改自己的源代码(添加注释、改变变量名等)
  3. 修改后的版本仍然是一个 Quine

难度:⭐⭐⭐⭐⭐


挑战 12:ZIP Quine

目标:创建一个 ZIP 文件,解压后包含的文件内容就是 ZIP 文件本身。

难度:⭐⭐⭐⭐⭐

进阶

  • 双重 ZIP Quine:解压两次得到原文件
  • 无限 ZIP Quine:无限次解压都得到有效的 ZIP

🎨 艺术性挑战

挑战 13:ASCII 艺术 Quine

目标:源代码是漂亮的 ASCII 艺术图案,且输出自身。

难度:⭐⭐⭐⭐

示例:源代码形状是一只猫,输出也是一只相同的猫。


挑战 14:游戏 Quine

目标:写一个可以玩的游戏(如贪吃蛇、俄罗斯方块),同时也是一个 Quine。

难度:⭐⭐⭐⭐⭐


挑战 15:分形 Quine

目标:运行程序输出一个图形(如谢尔宾斯基三角形),且源代码的形状就是这个图形。

难度:⭐⭐⭐⭐⭐


挑战 16:音乐 Quine

目标:程序输出一段音乐的乐谱/代码,且源代码的结构对应这段音乐。

难度:⭐⭐⭐⭐⭐


🏆 极限挑战

挑战 17:最短 Quine 竞赛

目标:在每种语言中写出最短的 Quine。

当前已知记录(Python):

_='_=%r;print(_%%_)';print(_%_)

(29 个字符)

限制

  • 不能使用文件读取作弊
  • 必须完全自包含

挑战 18:最长 Quine 竞赛

目标:写一个有意义的、尽可能长的 Quine(但有实际功能)。

难度:⭐⭐⭐⭐

想法

  • 一个完整的 Web 服务器
  • 一个机器学习模型
  • 一个操作系统内核

挑战 19:Kolmogorov 复杂度挑战

目标:写一个 Quine,它输出一个高度压缩的表示,而不是直接输出源代码。

难度:⭐⭐⭐⭐⭐


挑战 20:元 Quine

目标:写一个程序,它不是一个 Quine,但输出一个 Quine。

进阶:写一个程序,它输出一个程序,后者输出一个程序...最终是 Quine。

难度:⭐⭐⭐⭐⭐


🎪 特殊挑战

挑战 21:Brainfuck Quine

目标:用 Brainfuck 写一个 Quine。

难度:⭐⭐⭐⭐⭐

提示:Brainfuck 的 Quine 通常需要几百个字符。


挑战 22:正则表达式 Quine

目标:写一个正则表达式,它匹配自身。

难度:⭐⭐⭐⭐


挑战 23:SQL Quine

目标:用纯 SQL(不使用外部脚本)写一个 Quine。

难度:⭐⭐⭐⭐


挑战 24:Markdown Quine

目标:写一个 Markdown 文件,渲染后的 HTML 文本内容就是 Markdown 源码。

难度:⭐⭐⭐⭐


挑战 25:基因算法 Quine

目标:使用遗传算法,让程序自动演化成一个 Quine。

难度:⭐⭐⭐⭐⭐


📊 评分标准

每个挑战可以从以下维度评分:

维度 说明 权重
正确性 是否真的是 Quine 40%
优雅性 代码是否优雅简洁 20%
创意性 是否有独特思路 20%
文档 是否有良好注释 10%
测试 是否有测试验证 10%

🎯 学习路径建议

入门:1 → 2 → 3
    ↓
进阶:4 → 5 → 6 → 7
    ↓
高级:8 → 9 → 10
    ↓
大师:11+ (任意组合)

🏅 成就徽章

  • 🥉 Bronze Quiner:完成 5+ 入门挑战
  • 🥈 Silver Quiner:完成 3+ 进阶挑战
  • 🥇 Gold Quiner:完成 2+ 高级挑战
  • 💎 Diamond Quiner:完成任何极限挑战
  • 👑 Quine Master:完成 10+ 任意挑战

"The journey of a thousand quines begins with a single print statement."