一週間で身につくC言語の基本

おさえておきたいプログラミングの基本

コラム12.  :IOCCC


■ IT界の「イグノーベル賞?」

近年、パソコンが安価になったり、プログラミング環境などがインターネットで無料で入手できるようになったりして、プログラミングがだれにでもできるようになり、学生向けのプログラミングコンテストやアプリコンテストなどが催されたりするようになりました。

こういったコンテストでは洗練されたプログラムやアプリのアイディア・使い勝手などが審査の基準になるのでしょうが、世界は広いもので、IOCCC,という、C言語を使った、実に奇妙なプログラミングコンテストがあるので、ここで紹介したいと思います。

IOCCCとは、The International Obfuscated C Code Contest(IOCCC, 国際難読化Cコードコンテスト)の略であり、その正式名称からわかる通り、「故意に難解なC言語のプログラムを書き、その読みにくさと複雑さを競う」という、実に不思議なコンテストです。

科学の世界にも、非常に変てこな研究を行っている研究者に与えられる「イグ・ノーベル賞」という賞がありますが、このコンテストは、さしずめプログラミング会のイグノーベル賞といったところでしょうか。

■ 不思議なC言語のソースコード

では、このコンテストには一体どのようなソースコードが応募されているのでしょうか?簡単な例として、1987年「Best One Liner」受賞を受賞した、デビッド・コーン氏の作品を見てみましょう。

1987年「Best One Liner」受賞を受賞したソースコード
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}

これを実行すると、正常にコンパイルされ、実行すると「unix」と表示されます。また、次のソースコードは円周率を計算するプログラムです。

円周率を計算するソースコードの例
#define _ -F<00||--F-OO--;
int F=00,OO=00;main(){F_OO();printf("%1.3f\n",4.*-F/OO/OO);}F_OO()
{
            _-_-_-_
       _-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_
  _-_-_-_-_-_-_-_-_-_-_-_-_-_
    _-_-_-_-_-_-_-_-_-_-_-_
        _-_-_-_-_-_-_-_
            _-_-_-_
}

円のような形のソースコードが、円周率を計算するなんて、本当に面白いですね。

更に、変ったものとしては、以下のような、もうほどとど「ASCIIアート」のようなものまでもちゃんとしたCプログラムで、きちんとコンパイル・実行できるというのだから驚きです。

図1.ASCIIアートのようなIOCCCのソースコードの例

ASCIIアートのようなIOCCCのソースコードの例

こういうアイディアを考え付くのもすごいですが、それが実際に動くプログラムなのだから、本当に驚きですよね。

■ IOCCCの規約

そんなIOCCCですが、公式サイトで大会の理念を次のように説明しています。

  • 大会ルールの元で最高に意味不明/難解なCプログラムを書くこと
  • 皮肉なやり方でプログラミング作法の重要性を訴えること
  • 普通書かないコードを用いてCコンパイラに負荷をかけること
  • C言語の持つ、ある種の神秘性を解き明かすこと
  • 粗雑なCコードに関して邪魔の入らない公開討論の場を提供すること

第一回大会は1984年に行われ、以降2006年まで年1回のペースで入賞者が発表されています。(2007年から2010年の間は開催されず)

なぜこのようなコンテストが開催されるようになったのか、そのきっかけは、初期の開催者であるLandon Curt Noll氏とLarry Bassel氏が、Bourne Shellのソースコード、および初期のBSDのfingerのソースコードを見たことを見たことに由来しているのだとか。とはいえ、一時期中断されていた時期があっても現在まで続いているというのは、プログラミングの世界にいかに「物好き」は「変った人」が多いか…という一つの証拠になりそうですね。


一週間で学べるコースの一覧
Udemy
...
2024/10/01

Udemyでも学びましょう!

一週間でわかるC言語・C++言語がオンライン講座になりました!動画音声によってさらにわかりやすくなりました!! 1講座で2つの言語を学ぶことができる上に、練習問題の回答もダウンロードできます。

Read →
Impress一週間シリーズ
1週間でC言語の基礎が学べる本
2024/10/01

書籍化された一週間シリーズ

本講座が「1週間でC言語の基礎が学べる本」として書籍化されました!サイトの内容プラスアルファでより学習しやすくなっています!Impressより発売中です!!

Read →
Impress一週間シリーズ
...
2024/10/01

書籍化された一週間シリーズ

一週間シリーズは書籍化されています。こちらもどうぞ!

Read →
プログラマーなら欲しいグッズ
プログラミンググッズ

プログラミンググッズ

快適なプログラミング環境を構築したい人々にぜひとも揃えてほしいグッズです。

Read →
制作・管理
シフトシステム株式会社

シフトシステム株式会社

このサイトはシフトシステム株式会社によって制作・管理がなされています。

Read →