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

第28回国際難読C言語コンテスト

概要

  • IOCCC28(第28回国際難読Cコードコンテスト)の2024年受賞作品と特徴の紹介
  • 公式サイトとGitHubで受賞作品のソースコード・解説を公開
  • 4年ぶりの開催で過去最多となる23作品が受賞
  • ルールや運営体制を刷新し、今後のコンテスト運営効率化を実現
  • 各注目エントリの概要と楽しみ方をピックアップ

IOCCC28(第28回国際難読Cコードコンテスト)概要

  • IOCCC282025-03-05から2025-06-05 までエントリー受付
  • 4年ぶり開催、 40周年記念大会 として実施
  • 公式サイトとGitHubで 受賞作品のソースコード解説ページ を即時公開
  • 受賞発表は Our Favorite Universe YouTube Channel でライブ配信
  • 受賞作品の即時公開 により発表から2時間以内でコード入手可能

コンテスト運営・ルール刷新

  • 4年間で 6168件以上のコミット により公式サイトを再構築
  • mkiocccentryツールキット、新しい登録・提出サーバ導入
  • 運営の効率化と 審査期間の短縮 を実現(33日間で審査完了)
  • ルール(Rule 2)による コードサイズ制限 を10年以上ぶりに21%拡大
    • 受賞23作品中、3作品のみがサイズ上限近く
    • 小型・中型の高品質作品が多数受賞

IOCCC28 受賞作品の特徴と注目エントリ

  • 受賞数:過去最多の23作品 (従来記録は15)
  • 応募数・質ともに過去最高レベル
  • 4年の空白期間で応募者のスキル向上が顕著

注目エントリ紹介

  • 2024/kurdyukov1

    • 2000/natoriのテーマ再訪、浮動小数点未使用
    • 定数2551443の意味を考察する楽しみ
  • 2024/cable1

    • 世界最小のLLM(Meta LLaMA 2ベース)推論エンジン
    • get_model.shでモデル取得、ChatIOCCCツール実行可
  • 2024/howe

    • UTF-8対応の礼儀正しいed(1)風エディタ
    • QまたはCTRL+Cで終了
  • 2024/stedolan

    • 135バイトのワンライナー、魔法の数値に注目
    • 入力に10桁の16進数やMD5ハッシュを試す楽しみ
  • 2024/endoh1

    • Cプリプロセッサで画像を生成(8x8~512x512まで)
    • 実行結果はCコード、rt.cはコンパイル不可が仕様
  • 2024/weaver

    • コードを読む・実行して“見る・聴く”体験を推奨
  • 2024/mills

    • “Prize in ℤ₃”受賞、仮想マシン第3版がテーマ
    • Grueに食べられないように進む迷路的難読コード
  • 2024/codemeow

    • 実行経路の木構造と難読化の森を楽しむ作品
  • 2024/kurdyukov2

    • 魔法数値の意味を読み解くチャレンジ
  • 2024/kurdyukov3

    • “virtual quietus”賞、2.5Kバイト未満で仮想マシンを実装
    • キーボード操作のみ対応、try.shで操作ヒント
  • 2024/cable2

    • ソースをcatで見ると“魚”のような不思議な表示
  • 2024/macke

    • 仮想マシン上で“rm -rf /”やfork bombを安全に体験
    • C64エミュレータも内蔵
  • 2024/ferguson2

    • “Prize in yil-tas”受賞、3言語に精通した人向けの難読化
  • 2024/carlini

    • Intel 4004マイクロプロセッサをゲートレベルでエミュレート
    • 動作が非常に遅いが、回路動作を忠実に再現

今後のIOCCCについて

  • IOCCC29の ルール・ガイドライン大幅改訂 を予定
  • GitHubでのバグ修正・プルリク対応後、 2025年12月頃に次回開催予定
  • IOCCC28の受賞作は公式サイト・GitHubで tarball形式で一括ダウンロード可能

参加者・今後の応募者への重要ポイント

  • 大きなコードサイズ=高評価ではない
    • 小さく高品質な難読化が高く評価される傾向
  • ルールやガイドラインの最新版を必ず確認
  • 類似過去作の模倣や単なるCコード難読化だけでは受賞困難

公式リソース・ダウンロード先や各エントリの詳細は、公式IOCCCサイトおよびGitHubリポジトリを参照

Hackerたちの意見

このオブファスケーションコンペ、勝ち取ったエントリーごとに「index.htmlのウェブページを作成する」と明言してるのが好きだな。書き換えないのもいいね。

初心者なんだけど、これちょっと混乱するわ。

https://www.ioccc.org/2024/stedolan/index.html 昨年のエントリーを読んでたら、この画像圧縮のワンライナーがソースコードのハッシュを渡すと自分のロゴを出力するって?!めっちゃ面白い。

それ読んだ、やばいね!

ハッシュの仕組みがどうなってるのか気になってたんだ。メモから答えが得られたけど、それがまた面白い。「簡潔さが曖昧さより好まれたが、このプログラムはIOCCCの通常の明瞭さの基準を満たしていることを願っている。」

確かに! > 驚くべき偶然だけど、入力フォーマットのビット数は、5歳のGPUが1時間でできるMD5評価の数のlog2に近いんだ。

135バイトで!これは完全にマッドサイエンティストの領域だね。すごい、まさにバナナみたい。

同じ人がjqを書いたんだよね。

これ最高!:) ここから: https://github.com/ioccc-src/winner/blob/master/2024/kurdyuk... このコードは現在の月のフェーズをコンソールに描画するんだ。だから、もし君が人狼だったら、月のフェーズを監視できるよ。#include #include a,b=44,x, y,z;main() {!a ?a=2551443,x= -b ,y=2-b,z=((time ( 0)-592531)%a=a?x = -b,y+=4,10:x> 8) ^z>>8]),y> b?0 :main();}

これはちょっとdonut.cへのオマージュだね: https://www.a1k0n.net/2011/07/20/donut-math.html

1988年のπ計算のエントリーをちょっと思い出すね。https://en.wikipedia.org/wiki/International_Obfuscated_C_Cod... 1988年のエントリーは、自分のソースコードを使って計算してるんだ。

エントリーのルールが素晴らしい。過去にどのように悪用されたかが具体的にわかるからね。ルール2 ルール2では、提出物がルール2aとルール2bの両方を満たす必要があるよ。提出前に、iocccsize(1)ツールにファイル名をコマンドライン引数として渡すことで、ルール2aとルール2bに対してコードを確認できるよ。例えば: iocccsize prog.c iocccsize(1)のソースはmkiocccentryリポジトリにあるよ。「提出物をさらにテストする方法」に関するFAQも見てみて。ルール2も含めて、もっと徹底的なテストができるから。ルール2a、ルール2b、ルール17も見てね。ルール2a プログラムソースのサイズは4993バイトを超えてはいけない。ルール2b プログラムソースのファイル名を最新の公式IOCCCサイズツール(以下iocccsize(1)と呼ぶ)にコマンドライン引数として渡すと、表示される値は2503を超えてはいけない。ルール17も参照してね。

4993バイト、なんでこんな具体的な数字が出てきたんだろう?

ファイル名に2053バイト分の追加データを保存できるんだね。それって…意外と緩いな。

ああ、難読化されたコード、まさに人間らしい開発者の証だね。 :-)

https://www.underhanded-c.org/ もぜひ戻ってきてほしいな!

誰かがページをアップする前に何かを追加するのを忘れたみたいだね… ページの途中に「XXX-add-show-URL-here-XXX」って書いてあって、受賞者発表のYouTubeライブストリームのVODを指してる。編集: 投稿する前に、これを修正するために貢献できるリポジトリがあるか探したけど、見つからなかった。

昨日のライブストリームだよ。https://www.youtube.com/live/UDzGwTalVAc

お気に入りのエントリー(しかも優勝したやつ) https://github.com/ioccc-src/winner/blob/master/2005/persano...

ああああ、いつもこういうのは終わった後に知るんだよね。ずっと参加したいと思ってたのに。

俺の計画、毎回のコーディングコンペでリックロールするのは順調に進んでるぜ。ムハハハ!実はもっと賢いコードでいい感じのシクスルアニメーションを作った別のエントリーもあったんだけど、今年は同じようなエントリーがたくさんあったみたいだね。