1 ポイント 投稿者 GN⁺ 2025-08-04 | 1件のコメント | WhatsAppで共有
  • 今年の IOCCC28 は4年ぶりに再開され、世界中の開発者からの高度な難読化Cコード作品が多数出品された
  • ウェブサイトおよびインフラの再構築、mkiocccentryツールキット導入、提出システムの改善などにより、運営効率が大幅に向上
  • 審査過程は過去よりより複雑で厳しくなったにもかかわらず、審査期間は通常より大きく短縮
  • コードサイズ規定は緩和されたが、小さく高品質な作品が多数選定されているため、今後のコンテスト規定変更は限定的になる見通し
  • 興味深く独創的な受賞作や難読化テクニック、実験的な仮想マシン・エミュレータが紹介され、Cプログラミングのレベル向上に寄与した

IOCCC28の概要と開催の背景

  • 2024年に開催された第28回 International Obfuscated C Code Contest(IOCCC28)は、4年の空白期間を経て、世界各国の開発者が参加した創造的で難解なCコード競技である
  • この間、6,168件を超えるコミットが行われ、公式IOCCCサイトは「Great Fork Merge」という名称で大規模にリビルドされた
  • 運営面ではmkiocccentryツールキット、新規登録プロセス、提出サーバーの導入などさまざまな革新が実施され、審査効率とコード公開速度が改善された
  • 応募受付は2025年3月5日から2025年6月5日まで行われ、審査はわずか「33日」で終了し、コンテスト終了後約2時間以内にソースコードがすべて公開された

出品作品と選定トレンド

  • 今年のIOCCC28は応募数とクオリティが大きく上昇したことで審査難易度も高まり、過去最多の23作品が受賞作として選ばれた
  • 「4年間の休止期間の結果、より良い作品が生まれた面もあるが、全体として参加者は難読化とCプログラミングの腕前で顕著な進歩を遂げた」
  • 新しいコードサイズ制限(約21%増加)が適用されたが、受賞作の半数以上は全体制限の2/3未満で、10件は1/2未満のサイズで提出され、効率性と品質を両立した
  • これにより、今後10年間のコードサイズ規定の変化はほとんどないと見込まれる

審査規程および今後の計画

  • IOCCC規則とガイドラインは、今後さらに革新的かつ直感的に改訂される予定で、IOCCC Judgesは2025年12月開催予定のIOCCC29準備を進める
  • GitHubのIOCCC winnerリポジトリとmkiocccentry toolkitリポジトリに対して、Pull Requestベースの改善パッチを計画している

受賞作の紹介とハイライト

  • さまざまなテーマの受賞作が選定され、次の主要作品と特徴がある

    • ChatIOCCC: MetaのLLaMA 2ベースのオープンソース大規模言語モデルを世界最小規模なLLM推論エンジンとして実装し、面白いチャットボット機能を提供
    • Eh: UTF-8アクセントが適用されたエディタで、ed(1)より実用的な難読化コードを実装
    • 135バイト One-liner: 入力された16進値を基に多様な出力を実行する極端に短い難読化コード
    • Cプリプロセッサアート: 数千~数十万回プリプロセッサを実行して画像レンダリングを実現し、スクリプト実行時間を非常に長くしてユニークな体験を提供
    • Z₃仮想マシン: Z-マシンの第3版を参照した仮想マシン実装で、ソースコード解釈をゲームのように楽しむことができる
    • C64エミュレータ搭載仮想環境: フォークボム、ファイル削除など有害なシナリオも安全に試せる仮想マシン。C64まで搭載
    • Intel 4004チップエミュレーション: 1971年発売の世界初商用マイクロプロセッサ回路を、Cコードでゲート単位まで模倣した芸術的再現
    • 多言語パズル: 少なくとも3つの言語(C、英語、その他)に慣れた人向けの斬新な難読化

参加者および今後の推奨事項

  • 既存の受賞作と類似した難読化は加点が低く、独創性と完成度が審査の主要基準
  • 落選した参加者には改善後の再挑戦、あるいは多様なアプローチへの挑戦を推奨
  • 非受賞作の別途公開も歓迎

入賞作品のコンパイルおよび実行ガイド

  • 一部Cコンパイラの互換性問題が生じる場合があるため、最新のclangまたはgccを使用することを推奨
  • FAQおよび公式ドキュメントを通じて問題解決と修正提出の方法を案内

2024年IOCCC28受賞作のダウンロード

  • 受賞作品は圧縮ファイル(2024.tar.bz2)として提供され、各作品の詳細ページ、ソースコード、著者コメントを参照して独創的な難読化テクニックを学べる

(本文から直接アクセス可能な受賞作ダウンロードリンクと各受賞作ごとの詳細説明は公式サイトを参照)

1件のコメント

 
GN⁺ 2025-08-04
Hacker Newsのコメント
  • 本当にすごい :)
    このコードは、現在の月の位相をコンソールに描画してくれる。もし私が狼男なら、月の位相を観察できる。
  • このコード、donut.cへのオマージュっぽい
    donut.c 参考リンク
  • このコードは、1988年にπの値を計算していたIOCCCエントリにも少し似た雰囲気がある
    1988年のπ計算コード参考
  • Compiler Explorerですぐ確認できる
    Compiler Explorer へのリンク
  • このコードをコンパイルする方法は以下の通り
cc -Wno-implicit-int -Wno-implicit-function-declaration phase.c && ./a.out
  • リデザインのせいで、以前のIOCCCエントリへのリンクがすべて壊れてしまった。何十年にもわたってWikipediaのようなさまざまなサイトに広まっていたリンクが、リダイレクトなしで塞がれてしまい、今ではGithubでエントリを見るにはJavaScript対応ブラウザが必須になった
  • JSがない環境でアクセスするなら、git cloneでリポジトリを複製する方法を使えばよい
  • このエントリを見ながら過去のIOCCC作品を読んでみたが、この画像伸張ワンライナーは、ソースコードのハッシュ値を引数として渡すと自分自身のロゴ画像を出力する。とても不思議だ
  • このハッシュトリックがどう動いているのか気になっていたが、ノートに説明がある。ちなみにノートの内容も本当に面白い
    「簡潔さは難解さより重視されるが、このプログラムもなおIOCCC特有の明瞭性基準を十分に満たしている」と書かれている
  • 実に驚くべき偶然として、入力フォーマットのビット数が、5年前のGPUが1時間で実行できるMD5評価回数のlog2とほぼ一致している
  • この人、jqを作った人でもある
  • 135バイトで書かれている! ほとんどマッドサイエンティストの領域に近いコードだ。まったく信じがたいレベルだ
  • IOCCCエントリのルールが素晴らしい。過去にどう悪用されたかを明確に示す、とても具体的な規定になっている
Rule 2

Rule 2では、応募作品がRule 2aと2bの両方を満たさなければならない  
iocccsize(1) ツールでコードがこのルールを通過するか確認できる  
prog.c のようにファイル名を引数として渡せばよい

Rule 2a  
プログラムソースのサイズは4993バイトを超えてはならない

Rule 2b  
iocccsize(1) ツールでコードサイズを測定したとき、出力値が2503を超えてはならない

関連するもう少し詳しい内容はFAQまたはRule 17を参照
  • ということは、ファイル名に2053バイトの追加データを入れるのは許されるということだ。意外と緩いルールだ
  • 4993バイトって、どうしてこんな中途半端な数字になったのか気になる
  • underhanded-c.orgもまた再開してほしい
  • Cを使うべきでないという有力な論拠が、これ以上あるだろうか。これが明確で真面目な結論のように感じる
  • こういう難読コードはどんな言語でも書ける。Cが特によく合うのは確かだが、IOCCCの作品の大半は他の多くの言語にも応用できるトリックを使っている
  • 私が最も好きなIOCCC作品の一つであり、受賞作でもある
    2005年の persano.c を見る
  • たぶん私がプログラマーなら、自分の仕事は他人の目には純粋な意味不明の暗号のように見えるだろう
  • これは本当にすごい
    2024年 macke エントリ
    このプログラムは、最小限の機能だけで最新のLinuxシステム全体を実行するエミュレータだ
  • 作者です。このバイナリは1.6MBで最新のLinuxを動かす。サイズをできるだけ減らすために、ありとあらゆる方法を使った。WebAssemblyにもコンパイルされていて、ブラウザ内でも実行できる
  • このエントリはかなり混乱した