全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了! 原创

发布于 2025-8-18 12:52
浏览
0收藏

编辑 | 云昭

出品 | 51CTO技术栈(微信号:blog51cto)

就在不久前,让攻城狮们高呼“久违的程序员文化回来了”的一项赛事,重磅回归了!

时隔四年,让全球无数程序员调侃取乐的最古老、最有趣的比赛——IOCCC,国际混乱 C 代码大赛,回归到大众视野。

这场比赛已经有 40 年之久的创办历史,它的趣味自带“嗨皮”属性:

鼓励程序员用 C 语言写出故意难以理解的代码,并以此取乐。

就在这个月,IOCCC 通过一场线上直播颁奖典礼,庆祝了它的回归。

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区图片

由于今年的 IOCCC 属于中断四年后回归(往年通常只颁 12 到 15 个奖项),这段时间内堆积的高质量投稿数量异常之多,所以这次颁奖,直接破天荒地评出了 23 个获奖作品。

“我们实在找不到合理理由,把这些真正精彩的获奖作品排除在外!”

这些获奖作品堪比上周末世界机器人运动会有看头。

机器人动不动就躺平、要么就撞人逃逸,而 C 语言大师们可不会犯这么初级的错误。

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区图片

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区图片

这些 C 语言“东邪er”的作品,个个堪称一绝,即便 Claude、GPT5 之流的大模型见了也得拱手拜服。

这些作品中, 有的程序利用不可见的 Unicode 字符来打印一份三文鱼食谱;有的则用 Atari 2600 平台的 8 位音乐与图形 port 移植,成功让评委们中招“Rickroll”。

ps:科普一下,Rickrool 这个梗。“Rickroll”起源于 2007 年,已经成为互联网文化的经典梗。这种行为就是:

别人给你一个看似正经、很有吸引力的链接(比如“新游戏预告片”、“重要资料”、“你一定要看的东西”)。

但是你点开以后,结果跳出来的却是 Rick Astley 在 1987 年的歌曲 Never Gonna Give You Up 的 MV。

而这首 MV 的高潮部分旋律很魔性,同时视频画风很“80年代”,和现代内容反差极大。所以让观众觉得既“坑”又有趣。

如今,很多大型活动、直播、甚至官方账号都会故意“Rickroll”观众。

有意思的是,这次的评奖本来还想着让 AI 来帮忙评奖,但事与愿违。包括创始人 Landon Curt Noll 在内的评委表示,他们曾尝试用大型语言模型(LLM)来分析代码,但结果参差不齐,因此最终评审并未使用。

更值得大家注意的是,评委们一致认为:即便现在各种 Vibe Coding 工具十分强大,但人类依然能够写出远超当前 AI 模型能力的代码。

证据就是:其中一位获奖者写出了一个仅 750 字节的 LLM 推理引擎。哈哈,是不是很想亲自看一看,小编把链接放到了最后。

Noll 说:“每一届比赛都会有人展示出我之前根本没想到 C 还能做到的事情!”

不建议选手使用大模型,根本不是C,编译不了,更别说晦涩化

这段时间的空白还有一个好处。两届冠军(1993、1995)且自 1998 年起担任评委的 Leonid A. Broukhis 指出,这段时间给了他们机会尝试用 LLM 来分析源代码。但结果并不一致:

“有些作品,LLM 能凭借整体结构或逻辑数学用法,猜出大致在做什么……但也有些作品,它完全摸不着头脑。”

Noll 也澄清,他们并未在评审过程中使用 LLM,也不建议选手借助 LLM 创作未来的参赛作品:“更可能得到的是垃圾,甚至都不能编译……很多模型写出的东西看起来像 C,但根本不是 C——既编译不了,更别说晦涩化了!”

晦涩C大战AI:750字节打在LLM推理引擎

在担任 IOCCC 评委的第 40 年,Noll 强调人类程序员的价值:“这些作品的作者们投入了大量精力与技巧。他们是 C 语言大师,也擅长把复杂创意浓缩在极小的篇幅中!”

今年,美国一位程序员 Adrian Cable 写出了一个仅 750 字节的 LLM 推理引擎(依赖一个 7GB 的模型)。他评论道:“我不认为短时间内有任何模型能写出这种水准的代码!”

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区图片

不过,两位评委都表示,LLM 未来可能对参赛者有帮助——用来测试自己的代码是否足够难以理解。

Noll 举了个例子:“如果它说‘打印圆周率’,结果实际是 Rickroll……嗯,这已经有人做过了,但你懂我的意思。”(暗讽:大模型只会拿来主义~)

评委被恶搞了“永远不会放弃你”

今年评委们确实被 Rickroll 了。

评委回忆自己中招时的思路:这可能是是这辈子中被整蛊得最奇葩的一次!

代码里声明了一堆常量,还分叉出子进程,“一个在读……一个在输出别的东西。看起来不太明白,还夹杂着 sleep 调用……到底发生了什么?这狗子到底要干嘛?”

“结果——我们被 Rickroll 了!”

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区

Noll 在展示中解释说,这是对 Atari 2600 平台程序的粗糙移植,包括 8 位音乐和图形,并引用程序员 Vince Weaver 的提交说明:“我们猜它会处理一些音频文件和图形输出,但现在你们知道了。”

他还提醒观众保持学习精神:“去看看源码,弄明白它是怎么 Rickroll 你的!”

更惊艳的作品来自传奇晦涩 C 程序员 远藤侑介 (Yusuke Endoh)。运行他的程序能显示精美的 ASCII 动画,展现不同形状物体的旋转,模拟刚体的真实物理运动。

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区图片

为了增强效果,Endoh 甚至把代码的空格和缩进布置成一个旋转陀螺的 ASCII 图案。

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区图片

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区图片

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区Yusuke Endoh IOCCC 获奖作品(2024)的截图 - 固体物理学

三文鱼食谱与隐藏字符

程序员 Adrian Cable 今年还有第二个获奖作品——一个看似无害的 15 行程序,其中一行声明如下:

unsigned int *salmon = U" is very yummy";

然而运行后,程序居然会打印出一份完整的烤三文鱼食谱。(“用橄榄油、柠檬汁、大蒜、盐和胡椒调味三文鱼片……”)

原理在于:魔法般的混淆。

其实,还有几行额外的代码,但都是用不可见的 Unicode 字符写成,在大多数编辑器默认设置下根本看不到。

该作品最终获得了比赛的“混沌之水(Murky Waters)”奖。(也就是:浑水摸鱼奖项)

为了进一步迷惑评委,作者还加入了一个无用的 for 循环作为诱饵:

for (int i = 1; i <= 10; i++) { printf("%d * %d = %d\n", i, i, i*i); }

但这段代码在运行时根本不会被执行。

快乐不独有,福利大放送:

已上传到Github,地球人都可下载

这些有趣的代码,开源了吗?当然。

今年所有获奖作品的源代码,包括那份“Rickroll”,都已上传到专门的 GitHub 仓库。IOCCC 将在 2025 年 12 月再次举办。

现在,有一个特别的 GitHub 仓库,收录了不仅是今年的获奖源码,还包括自 1984 年以来的所有作品。(在颁奖视频中,Noll 还象征性地把今年的获奖源码推送到最新目录。)

全球最古老程序员赛事回归!晦涩C代码大战AI!750字节手搓一个推理引擎,评委:被瑞克滚了!-AI.x社区图片

Noll 在视频里说:“所有代码都在那里,随时可以下载研究。”

“当然,包括 Rickroll,如果你想看的话。”

在 Patreon 的一段视频中,Noll 还承诺未来会制作短视频,介绍一些历届 IOCCC 的经典作品。而在下一届比赛中,他们计划更新作品打包工具(“现在已有一些 Pull Request 在处理”),同时改进服务器和评审用的内部工具。

IOCCC 将很快再次回归。据另一份说明,该大赛的投稿服务器将在 IOCCC29 报名开启时恢复运行,预计时间是 2025 年 12 月。他们还会对规则和指南进行重写与精简,并基于这届评审经验制定一些新规。

别看代码很有趣,但评委们直呼:太累了

不过,就目前而言,评委们最期待的是——休假。Noll 在 Patreon 视频中说:“自 2020 年 12 月以来,我们一直在忙这个项目。很多志愿者帮忙,投入了上千小时构建工具和网站……

现在是享受获奖作品成果、放松一下的时刻了。我们要离线一阵,去读纸质书,好好断联一段时间。”

“请尽情欣赏 IOCCC28 的获奖作品吧。它们真的很棒,我们很高兴能呈现给大家!”

彩蛋:现场颁奖、没有设置最佳作品(因为实在比较不出来)

在程序员世界中,这是一个标志性的比赛。今年还复活了一个 40 年前的传统:现场公布获奖者。

上世纪 80 年代,获奖名单总是在 Usenix 会议的一个特别环节公布(紧接在 BSD 下一个版本的讨论之后)。那时候太早了,“我都是把内容打印在投影胶片上,用投影仪展示”,Noll 回忆道——因为当时还没有能进行数字投影的计算机。

如今,大赛主办方已经对基础设施进行了现代化改造——甚至提供视频展示获奖作品在编译运行后产生的古怪输出。Noll 说:“我希望每个作品都能获得应有的舞台”,为此还请来 

David McInnis 为颁奖典礼制作复杂的演出,包括多路视频和音频信号,甚至原创音乐。

“今年没有设置‘最佳作品’或‘大奖’,部分原因就是因为太多作品都配得上这个称号!”

最后,这些邪修的代码,既然主办方也大方地放到了 Github 上,小编当然也扒到了地址,给大家奉上,enjoy 程序员独有的快乐吧:​​https://github.com/ioccc-src/winner​

颁奖地址:​​https://www.ioccc.org/2024/cable1/index.html​

视频地址:​​https://www.youtube.com/watch?v=UDzGwTalVAc​

本文转载自​​51CTO技术栈​​,作者:云昭


©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
相关推荐