おさえておきたいプログラミングの基本
近年、パソコンが安価になったり、プログラミング環境などがインターネットで無料で入手できるようになったりして、プログラミングがだれにでもできるようになり、学生向けのプログラミングコンテストやアプリコンテストなどが催されたりするようになりました。
こういったコンテストでは洗練されたプログラムやアプリのアイディア・使い勝手などが審査の基準になるのでしょうが、世界は広いもので、IOCCC,という、C言語を使った、実に奇妙なプログラミングコンテストがあるので、ここで紹介したいと思います。
IOCCCとは、The International Obfuscated C Code Contest(IOCCC, 国際難読化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のソースコードの例
こういうアイディアを考え付くのもすごいですが、それが実際に動くプログラムなのだから、本当に驚きですよね。
そんなIOCCCですが、公式サイトで大会の理念を次のように説明しています。
第一回大会は1984年に行われ、以降2006年まで年1回のペースで入賞者が発表されています。(2007年から2010年の間は開催されず)
なぜこのようなコンテストが開催されるようになったのか、そのきっかけは、初期の開催者であるLandon Curt Noll氏とLarry Bassel氏が、Bourne Shellのソースコード、および初期のBSDのfingerのソースコードを見たことを見たことに由来しているのだとか。とはいえ、一時期中断されていた時期があっても現在まで続いているというのは、プログラミングの世界にいかに「物好き」は「変った人」が多いか…という一つの証拠になりそうですね。
一週間でわかるC言語・C++言語がオンライン講座になりました!動画と音声によってさらにわかりやすくなりました!! 1講座で2つの言語を学ぶことができる上に、練習問題の回答もダウンロードできます。
Read →
本講座が「1週間でC言語の基礎が学べる本」として書籍化されました!サイトの内容プラスアルファでより学習しやすくなっています!Impressより発売中です!!
Read →