世界を動かす技術を、日本語で。

第29回国際難読C言語コンテスト(IOCCC)2025年の受賞者

概要

  • IOCCC29(第29回国際難読Cコードコンテスト)の結果と概要
  • 2025年の受賞作や注目エントリを紹介
  • 新たな「ファンチャレンジ」導入と参加方法
  • ルール・ガイドラインの更新と今後の展望
  • 受賞者・非受賞者へのメッセージとFAQ案内

IOCCC29(第29回国際難読Cコードコンテスト)総括

  • IOCCC29 は2025年に開催された、歴史ある難読Cコードコンテスト
  • 今年も 高品質かつ多数の応募作品 が集まり、例年に比べても質・量ともに充実
  • 公式Webサイト で各受賞作のindex.htmlページを参照可能
  • 受賞作の ソースコードや解説、実行方法 も掲載
  • すべての受賞作を tarball形式で一括ダウンロード 可能

近年の傾向と運営改善

  • IOCCC28は4年ぶりの開催で 応募数・質ともに過去最高水準
  • IOCCC29も 高い応募数と質 を維持
  • Webサイト刷新やSNS活用、過去作の蓄積 が質向上の要因
  • コンテストのクローズ手順、審査、発表、Web更新などを詳細にドキュメント化
  • ドキュメント化により 運営全体の効率化と品質向上 を実現

受賞作発表とメディア展開

  • Our Favorite Universe のYouTubeチャンネルで受賞作をプレゼン
  • 各受賞作index.htmlページに YouTubeセグメントへのリンク を追加予定

ファンチャレンジ(Fun Challenge)の新設

  • 今年から「 ファンチャレンジ」を各受賞作の Judges’ remarks に追加
  • 作品の内容を理解した上で 追加課題に挑戦可能
    • 例:prog.cの改変、解説文の作成など
  • GitHub Pull Request による貢献を歓迎
  • チャレンジが終了していても より良い解決策 があればPR提出可能
  • IOCCC Judgesが 優れたPRを採用 する場合あり

ルール・ガイドラインの刷新

  • 2025年版ルール(ver 29.15)・ガイドライン(ver 29.08) を適用
  • 多くのボランティアによる 編集・統合・再構成 で大幅リライト
  • 運営の透明性・公平性の向上

今後の予定と運営計画

  • IOCCC30 は2026年末に開始、2027年第1四半期に締切予定
  • IOCCC30の準備・運営も 詳細に内部ドキュメント化
  • IOCCC29終了後、 運営チームは短期休暇 を予定
  • mkiocccentryリポジトリ のPR対応は休暇後に実施

最終審査と受賞者

  • 最終審査で 高評価エントリ が多数
  • 今年は 台湾(jingp49) から初の受賞者
  • Hat trick of Hat-tricks (3冠)達成者:
    • Yusuke Endoh (endoh1, endoh2, endoh3)
    • Nick Craig-Wood (ncw1, ncw2, ncw3)
    • Don Yang (yang1, yang2, yang3)

注目受賞作(抜粋)

  • 2025/cable: Subleqコンピュータ
  • 2025/cesmoak: ブラックホール・パンチカードFortran
  • 2025/endoh3: patch/diffクワイン
  • 2025/jhshrvdp: ローグライク風ゲーム
  • 2025/jingp49: Dr. WHO数列
  • 2025/ncw1: GameBoyエミュレータ
  • 2025/tompng: 海の音ジェネレータ
  • 2025/uellenberg: クワインPong
  • 2025/yang2: Zoltraakエンコーディング
    • 他にも多数の受賞作を 公式サイトで紹介

非受賞者へのエール

  • 多くの応募作が 惜しくも受賞を逃す
  • 努力は高く評価 されるが、受賞は限られた作品のみ
  • 改良して次回IOCCC30へ再挑戦 を推奨
  • 過去の非受賞作が 改良されて受賞する例も多数
  • 新しいアイデアや別ジャンルでの挑戦 も歓迎
  • 改良・再応募しない場合は 自身で公開も可能

受賞作のコンパイル・実行

  • 一部のCコンパイラは 互換性や動作が不十分 な場合あり
  • 最新のclangやgcc でのビルド推奨
  • FAQ で下記の情報を案内
    • IOCCCエントリのコンパイル方法
    • 依存関係や実行時の問題
    • 修正方法や作者情報の更新
    • Webサイト問題の報告・修正方法
    • IOCCCへの連絡先・FAQ・公式サイト案内

2025年受賞作一覧(抜粋)

  • 2025/ayu: IMO賞
  • 2025/cable: 架空エミュレータ賞
  • 2025/cesmoak: レトロスペース賞
  • 2025/diels-grabsch: ワンライナー賞
  • 2025/dogon: 一貫性賞
  • 2025/endoh1: 最も目を引く賞
  • 2025/endoh2: 最も衝撃的賞
  • 2025/endoh3: 最も堅牢賞
  • 2025/ferguson: 反対賞
  • 2025/howe: 侵略賞
  • 2025/jhshrvdp: テレポート賞
  • 2025/jingp49: Who won賞
  • 2025/kurdyukov: カウント賞
  • 2025/mattpep: 最も難読なオプション賞
  • 2025/ncw1: 実用エミュレータ賞
  • 2025/ncw2: 分数エミュレータ賞
  • 2025/ncw3: Unicode活用賞
  • 2025/tompng: 癒し賞
  • 2025/uellenberg: ピンポン賞
  • 2025/yang1: 複合賞
  • 2025/yang2: 魔法の言葉賞
  • 2025/yang3: INABIAF賞
    • 公式サイトで全受賞作を参照可能

参考・FAQ・公式情報

  • www.ioccc.org :公式サイト
  • Winning Entries of 2025 :2025年受賞作一覧・ダウンロード
  • FAQ :エントリのビルド・実行・修正・連絡先など詳細案内

Hackerたちの意見

ウェブサイト自体が難解で、Cソースを見つけるのが全然簡単じゃないね!

直接 https://www.ioccc.org/2025/#inventory に飛べるよ。

最初の文は、勝者のエントリーをリストしたセクションへのリンクだよ。それぞれには右上に「Cコード」のリンクがあるんだ。

本当にナビゲートが難しい。コンテストが何なのか全然わからないし、すでに知ってる前提で進んでるみたい。

ゲームボーイエミュレーターのコードもゲームボーイみたいだ。スロークラップ、これはすごい、間違いなくお気に入りの作品だよ。 https://github.com/ioccc-src/winner/blob/master/2025/ncw1/pr... 作者のニック・クレイグウッドはrcloneのクリエイターなんだ!

うわ、かっこいい!俺がCSSとPHPを打ってるのを見てるみたいだ…

楽しんでもらえてよかったよ!:-) もしどうやって作ったか知りたいなら、こちらがソースだよ: https://github.com/ncw/ioccc-gameboy そこには少しだけ難読化されていないバージョンもあるよ。これが実際に僕が作業したもので、プログラムで全ての変数名を潰してゲームボーイの形に収めたんだ。エントリーのサイズ制限が厳しかったんだよね。IOCCCのエントリーでは、空白以外の文字が2503文字まで(簡略化した表現だけど、ルールは複雑)で、合計コードサイズは4Kまでなんだ。Z80プロセッサとゲームボーイのハードウェアエミュレーターを収めるにはあまりにも少ないよ!最初はCでフルゲームボーイエミュレーターを書いたんだけど、約6000文字の空白以外の文字数だったんだ。それを2503の制限に収めるために、約100時間かけて頑張ったよ。しばらくの間、収まるかどうか不安だった。エミュレーターにテトリス(比較的シンプルなゲーム)を動かすのを目標にして、Z80エミュレーターのハーフキャリーフラグや、テトリスには必要ないゲームボーイエミュレーションのウィンドウシステムなどの機能を削除したんだ。それから、Cコードをひどく使い倒して、暗黙のintを使ったことはもう忘れられないよ。IOCCCのルールにも工夫を凝らして、ソースをチェックするCプログラムを逆解析して抜け道を探したりもした!オペレーターが1トークンとしてしかカウントされないことを発見して、それがすごく役立ったよ。サイズが小さくなったら、動かすゲームをいくつか用意しなきゃいけなかったんだ。4つ作ったよ、Z80アセンブラで書いたテストプログラム、アセンブラで書いたπ計算機、Cでgbdk-2020を使って書いた3Dの三目並べゲーム、そしてCで書いたチェスプログラム。オープンソースのゲームがエミュレーターで動くこともわかったから、できるだけダウンローダーも追加したよ。BCD算術を使ってるゲームはあまりないみたいで、意外だった!楽しいプロジェクトだったよ。

LLMが競い合うことができないのは残念だね。彼らができる難解さを考えると。

自分の経験では、LLMは多くのエントリー(自分のも含めて)をデオブファスケートするのが結構得意だったけど、かなり難解なコードを生成するのは全然ダメだった。だから、難解化は本当に人間的なアートだと言えるね---少なくとも今のところは。

フロンティアモデルをIOCCCコードで動かすのが「安全性」のせいでちょっと面倒だけど、それを回避できてもLLMはあんまり得意じゃない。コードを難解化するには、LLMが苦手な創造性と狡猾さが必要なんだ。

LLMは許可されてるよ。[0] > コードを書くために使いたいツールは何でも自由に使っていいよ。AIベースのツール、LLM(大規模言語モデル)、バーチャルコーディングアシスタント、コードジェネレーター、またはそれに類似したツール、自分のツールも含まれるよ。IOCCCの審査員は、提出した難読化されたCコードの著者があなたであれば、使用したツールに基づいて差別しないからね。[0]

そうだね、でもゲームボーイのコードをゲームボーイっぽく見せることはできないよ、頼まれない限りはね。それに、たぶんそれもうまくいかないだろうし。これがLLMと人間の違いで、だからこそこの競技は価値があるんだよね。

映画祭みたいに、エントリーの90%が賞を取るけど、映画祭とは違って一番の作品がないのが変だね。現代教育みたい。

これが死ぬほどダウンボートされてるけど、各IOCCCにどれくらいのエントリーが提出されるかを予想するのは楽しいよね。僕の予想は大体10^2.5、つまり300~400くらいかな。理由は以下の通り:- 後で公開される当選エントリーと落選エントリーの数から、この数は少なくとも50はあるべきだと思う。- FAQによれば、審査ラウンドの数は少なくとも3回以上あるみたい。各ラウンドでエントリーの半分くらいが落ちるとしたら、当選エントリーごとに少なくとも10件の提出が期待できるよね。個人的には、最終的な落選率は1~20%くらいまで下がると思うけど、最初の数ラウンドは簡単だと思うから、これは良い最低予想だと思う:1~200。- 現在の審査員の数は、三桁の提出数にはちょうどいい感じ。典型的な学会の受理率とよく似てるよね!もし何千件も提出があったら(今のAI会議みたいに…)、もっと多くの審査員が必要だし、もっと重要なのは、各審査員が全体のプロセスでちょうどいい仕事量をこなせるように、審査員のレベルももっと必要になるはず。だから、最大の予想は1,000だね。- 僕のベストな予想は、単純に二つの極端の幾何平均だよ。

もし誰かが気になっているなら、IOCCCのガイドラインではLLMの使用が明確に許可されてるよ。「IOCCCは、様々な技術(しばしば自分のツール)を巧みに使ってコードを開発した著者による、素晴らしい受賞作品の豊かな歴史を持っています。」

それってLLMの体操競技みたいになったの?

僕はAI反対派だけど、今回は面白いと思う。特に、ネット上には難読化されたCがあんまりないし、LLMは実際のコードから意図を推測できないからね。LLMサポートのエントリー、見つけた?逆に、難読化されたコードの機能をどれだけ正確に推測できるかも興味深いよね。

ルール7は、「ツール」にAIが含まれるなら自己矛盾になるね。https://www.ioccc.org/2025/rules.html これはカスタムコードジェネレーターを指してるみたい。AIについて明言してるのに「豊かな歴史」について話すのはどういうことなんだろう?

お気に入りは、LinuxとDoomを動かせる366バイトのCプログラムエミュレーターだね。[0] このVMはOISC、つまりワン・インストラクション・セット・コンピュータを実装してる。[1]

こちらがその動画だよ: https://www.youtube.com/live/MoWCwZx1Swc?si=eIOlRsKWNKRVRZeB...

わお!しかも、非常に興味深いSUBLEQの変種も実装してるんだね、それがチューリング完全なんだ。 >「このVMはOISC - One Instruction Set Computerを実装している。この命令は3つの符号付き32ビットオペランド、a、b、cを取り、メモリm[]からプログラムを実行する。1 PC(プログラムカウンター)は0から始まる。2 次の命令(32ビット符号付きオペランドa、b、c)を取得する。3 いずれかのオペランドの下位ビットがセットされていたら、それを削除し、そのオペランドをm[オペランド]に置き換える。つまり、そのアドレスのデリファレンス。4 m[b] = m[b] - m[a]を設定する。5 m[b]が0または負なら、PCをcに設定し、そうでなければPCを3ワード増加させる。6 ステップ2に戻る。」

これをダウンロードしてビルドしたけど、今まで見た中で一番すごいものだって自信を持って言えるよ。

LLMがどんなプログラミング言語で書かれたプログラムでも、簡単に難読化されたCコードに変換できるし、その正しさも自動で簡単に確認できるから、こういう競技がまだ意味があるのか分からないな。何か見落としてる?

何か見落としてる? 人間のアートは、人間性を持ったアートに価値がある。自動化されると、価値がなくなるんだよね。

そうだね、LLMはできるけど、競技は科学的な気質や競争心、複雑な問題解決能力を育てることにもっと関係してると思う。だから、まだ意味があるし、これからもずっと意味があると思うよ。

何か見落としてる? 学校? /s

そうだよ、試してないだけだね。LLMは実際、難読化を解くのが得意だけど、難読化するのは苦手なんだ。まだできないんだよね。それに、そういう作品に必要な創造性も欠けてる。難読化はその一部に過ぎなくて、アイデアを考えるのも別の部分だよ。多くの作品には、真のアート作品にする特別なクオリティがあるんだ。

IOCCCは単なる難読化だけじゃなくて、審査員にはセンスがあるってことを見落としてるよ。

それじゃあ、面白くないじゃん?

IOCCCの応募作品は大好きなんだけど、スケジュールや提出プロセスがめちゃくちゃに見えるね。それってジョークの一部なの?それとも、一貫性を持たせてシンプルなプロセスを設計するのが難しいから?

アンダーハンデッドCコンテストが戻ってきてほしいな、あれの方がずっと面白かった。難読化Cの競技者には失礼なつもりはないけど。