全球最古老程序員賽事回歸!晦澀C代碼大戰AI!750字節手搓一個推理引擎,評委:被瑞克滾了! 原創
編輯 | 云昭
出品 | 51CTO技術棧(微信號:blog51cto)
就在不久前,讓攻城獅們高呼“久違的程序員文化回來了”的一項賽事,重磅回歸了!
時隔四年,讓全球無數程序員調侃取樂的最古老、最有趣的比賽——IOCCC,國際混亂 C 代碼大賽,回歸到大眾視野。
這場比賽已經有 40 年之久的創辦歷史,它的趣味自帶“嗨皮”屬性:
鼓勵程序員用 C 語言寫出故意難以理解的代碼,并以此取樂。
就在這個月,IOCCC 通過一場線上直播頒獎典禮,慶祝了它的回歸。
圖片
由于今年的 IOCCC 屬于中斷四年后回歸(往年通常只頒 12 到 15 個獎項),這段時間內堆積的高質量投稿數量異常之多,所以這次頒獎,直接破天荒地評出了 23 個獲獎作品。
“我們實在找不到合理理由,把這些真正精彩的獲獎作品排除在外!”
這些獲獎作品堪比上周末世界機器人運動會有看頭。
機器人動不動就躺平、要么就撞人逃逸,而 C 語言大師們可不會犯這么初級的錯誤。
圖片
圖片
這些 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 的模型)。他評論道:“我不認為短時間內有任何模型能寫出這種水準的代碼!”
圖片
不過,兩位評委都表示,LLM 未來可能對參賽者有幫助——用來測試自己的代碼是否足夠難以理解。
Noll 舉了個例子:“如果它說‘打印圓周率’,結果實際是 Rickroll……嗯,這已經有人做過了,但你懂我的意思。”(暗諷:大模型只會拿來主義~)
評委被惡搞了“永遠不會放棄你”
今年評委們確實被 Rickroll 了。
評委回憶自己中招時的思路:這可能是是這輩子中被整蠱得最奇葩的一次!
代碼里聲明了一堆常量,還分叉出子進程,“一個在讀……一個在輸出別的東西。看起來不太明白,還夾雜著 sleep 調用……到底發生了什么?這狗子到底要干嘛?”
“結果——我們被 Rickroll 了!”

Noll 在展示中解釋說,這是對 Atari 2600 平臺程序的粗糙移植,包括 8 位音樂和圖形,并引用程序員 Vince Weaver 的提交說明:“我們猜它會處理一些音頻文件和圖形輸出,但現在你們知道了。”
他還提醒觀眾保持學習精神:“去看看源碼,弄明白它是怎么 Rickroll 你的!”
更驚艷的作品來自傳奇晦澀 C 程序員 遠藤侑介 (Yusuke Endoh)。運行他的程序能顯示精美的 ASCII 動畫,展現不同形狀物體的旋轉,模擬剛體的真實物理運動。
圖片
為了增強效果,Endoh 甚至把代碼的空格和縮進布置成一個旋轉陀螺的 ASCII 圖案。
圖片
圖片
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 還象征性地把今年的獲獎源碼推送到最新目錄。)
圖片
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技術棧??,作者:云昭

















