-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
47 changed files
with
2,881 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
--- | ||
id: 1993/ant | ||
year: 1993 | ||
order: 1 | ||
authors: "Anthony_C._Howe" | ||
orig_url: "https://www.ioccc.org/1993/ant.c" | ||
hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/ant.hint" | ||
title: "IOCCC 1993: Best Utility" | ||
award_ja: "最高のユーティリティ" | ||
--- | ||
|
||
## 動作 | ||
|
||
egrep風コマンド。 | ||
|
||
``` | ||
$ gcc -o ant ant.c | ||
$ ./ant a.*t$ ant.hint | ||
ant.hint: make ant | ||
ant.hint: See the author's Posix P1003.2-like documentation file ant.txt | ||
``` | ||
|
||
## 解説 | ||
|
||
作り込み系の作品。 | ||
POSIX.2の拡張正規表現の小さくないサブセットに対応しているとのこと。 | ||
|
||
難読化は識別子が1文字である程度で、見逃していない限り特別なテクニックは見られない。 | ||
man風のドキュメントが添付されている([ant.txt](https://www.ioccc.org/1993/ant.txt))。 | ||
同作者の[[[1992/ant]]]({{ site.baseurl }}{% link 1992/ant.md %})と同系統の作品。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
--- | ||
id: 1993/cmills | ||
year: 1993 | ||
order: 2 | ||
patch: true | ||
authors: "Christopher_Mills" | ||
orig_url: "https://www.ioccc.org/1993/cmills.c" | ||
hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/cmills.hint" | ||
title: "IOCCC 1993: \"Bill Gates\" Award" | ||
award_ja: "『ビル・ゲイツ』賞" | ||
linewrap: true | ||
--- | ||
|
||
## 動作 | ||
|
||
X Window Systemの中で窓が飛び回り、粉砕していくデモアプリ。 | ||
[[[1991/davidguy]]]({{ site.baseurl }}{% link 1991/davidguy.md %})と同じようにVcXsrvを準備した上で、次のように実行する。 | ||
|
||
``` | ||
$ gcc -o cmills cmills.c -lX11 | ||
$ ./cmills | ||
``` | ||
|
||
{% include img.html src="1993-cmills.png" desc="X Window Systemの画面の中を窓が飛び回って粉砕していく" %} | ||
|
||
## 解説 | ||
|
||
作者の意図はよくわからないが、賞名から考えてWindowsに対する皮肉として採択されていると思う。 | ||
当時のUnix文化圏におけるWindowsの空気感をよく知らないので、あまりわからない。 | ||
|
||
難読化は、短い識別子を使い、インデントをなくした程度に見える。 | ||
窓が割れる確率は運動エネルギー(つまり面積と速さ)に基づくとのこと。 | ||
|
||
現代では処理速度が速すぎるので`usleep`で少しウェイトを置いた。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
--- | ||
id: 1993/dgibson | ||
year: 1993 | ||
order: 3 | ||
authors: "David_Gibson" | ||
orig_url: "https://www.ioccc.org/1993/dgibson.c" | ||
hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/dgibson.hint" | ||
title: "IOCCC 1993: Best Abuse of the C Preprocessor" | ||
award_ja: "Cプリプロセッサの最高の悪用" | ||
--- | ||
|
||
## 動作 | ||
|
||
ライフゲーム。life.dに初期盤面を入れておく。 | ||
|
||
``` | ||
$ cat life.d | ||
LIFE | ||
L _ _ _ _ _ | ||
L _ _ _ O _ | ||
L _ O _ O _ | ||
L _ _ O O _ | ||
L _ _ _ _ _ | ||
GEN 0 | ||
END | ||
``` | ||
|
||
1世代すすめる。 | ||
|
||
``` | ||
$ gcc -ansi dgibson.c -o dgibson | ||
$ ./dgibson | ||
LIFE | ||
L _ _ _ _ _ | ||
L _ _ O _ _ | ||
L _ _ _ O O | ||
L _ _ O O _ | ||
L _ _ _ _ _ | ||
GEN 1 STAT 329040 | ||
END | ||
``` | ||
|
||
見ての通りこの出力は初期盤面と同じフォーマットになっているので、life.dを更新して再コンパイルするとさらに次の世代が求められる。 | ||
|
||
``` | ||
$ ./dgibson > life.d | ||
$ gcc -ansi dgibson.c -o dgibson | ||
$ ./dgibson | ||
LIFE | ||
L _ _ _ _ _ | ||
L _ _ O _ _ | ||
L _ _ _ O _ | ||
L _ O O O _ | ||
L _ _ _ _ _ | ||
GEN 2 STAT 328960 | ||
END | ||
``` | ||
|
||
## 解説 | ||
|
||
dgibson.cの最後で`#include "life.d"`としているとおり、この盤面のフォーマットはdgibson.cで定義されたマクロで展開することで有効なCコードとなる。C言語での組み込みDSLと言える。 | ||
|
||
こんな大きいのも動くので良い。ビルドにちょっと時間がかかるが、実行は一瞬。 | ||
|
||
``` | ||
$ time gcc -ansi dgibson.c -o dgibson | ||
real 0m2.400s | ||
user 0m2.179s | ||
sys 0m0.211s | ||
$ ./dgibson | ||
LIFE | ||
L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ O _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ O _ _ O _ _ _ _ O _ O O O O O _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ O O O _ _ _ O _ _ | ||
L _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ | ||
L _ _ _ _ _ _ _ _ O O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ O _ | ||
L _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ O _ | ||
L _ _ _ _ _ _ O O O O O _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ O _ _ _ _ _ _ _ _ O _ O O _ _ O _ O _ _ | ||
L _ _ _ O O _ _ _ _ _ O O _ _ _ _ O _ _ _ _ O O O O O O O _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ | ||
L _ _ O _ _ _ O O O _ _ O _ _ O O O _ _ _ O _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O _ | ||
L _ O _ _ _ O _ _ _ _ _ O O _ O O _ _ _ O O O O O O O O O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ | ||
L _ O _ _ _ _ _ O _ _ _ O _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ O O O _ | ||
L _ O _ _ O _ _ O _ _ _ _ _ O O O _ O O O O O O O O O O O O O O _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ | ||
L _ _ O _ O _ _ O O _ O _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O _ _ O _ O O _ _ O _ O _ _ | ||
L _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ O O O O O O O O O O O O O O _ O O O _ _ _ _ _ O _ _ O _ _ O _ | ||
L _ O O O _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ O _ _ _ O _ _ _ _ _ O _ | ||
L _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O O O O O O O O O O O _ _ _ O O _ O O _ _ _ _ _ O _ _ _ O _ | ||
L _ O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ O _ _ _ O O O _ _ O _ _ O O O _ _ _ O _ _ | ||
L _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ O O O O O O O _ _ _ _ O _ _ _ _ O O _ _ _ _ _ O O _ _ _ | ||
L _ _ O _ O _ _ O O _ O _ _ _ _ _ _ _ _ O _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ O O O O O _ _ _ _ _ _ | ||
L _ O _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ _ _ | ||
L _ O _ _ _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ O O _ _ _ _ _ _ _ _ | ||
L _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ _ _ _ _ _ _ | ||
L _ _ O _ _ _ O O O _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ O _ _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ O O O O O _ O _ _ _ _ O _ _ O _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ O _ _ _ _ O _ _ _ _ _ O O O _ _ _ O O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ O O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ O _ _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ O _ O _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | ||
L _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | ||
GEN 2 STAT 3089152 | ||
END | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
--- | ||
id: 1993/ejb | ||
year: 1993 | ||
order: 4 | ||
authors: "E._Jay_Berkenbilt" | ||
orig_url: "https://www.ioccc.org/1993/ejb.c" | ||
hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/ejb.hint" | ||
title: "IOCCC 1993: Best Obfuscated Algorithm" | ||
award_ja: "最高の難読化アルゴリズム" | ||
--- | ||
|
||
## 動作 | ||
|
||
2つのアルゴリズムが搭載されている。 | ||
1つはハノイの塔。コマンドライン引数に正の値を与えると、その高さのハノイの塔の解答を表示する。 | ||
|
||
``` | ||
$ gcc -o ejb ejb.c | ||
$ ./ejb 3 | ||
move ring 1 from stack 1 to stack 2 | ||
move ring 2 from stack 1 to stack 3 | ||
move ring 1 from stack 2 to stack 3 | ||
move ring 3 from stack 1 to stack 2 | ||
move ring 1 from stack 3 to stack 1 | ||
move ring 2 from stack 3 to stack 2 | ||
move ring 1 from stack 1 to stack 2 | ||
``` | ||
|
||
もう1つ。負の値をあたえると、patience puzzleを外すまでの状態の列を表示する。 | ||
patience puzzleはたぶん[連環・チャイニーズリング](https://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A3%E3%82%A4%E3%83%8B%E3%83%BC%E3%82%BA%E3%83%AA%E3%83%B3%E3%82%B0)のこと。 | ||
右端の数字が最初のリングを表し、1はU字金具に入った状態、0は外れた状態を表すらしい。 | ||
|
||
``` | ||
$ ./ejb -3 | ||
111 | ||
110 | ||
010 | ||
011 | ||
001 | ||
000 | ||
``` | ||
|
||
## 解説 | ||
|
||
コードはセミコロンをかたどっている。 | ||
このプログラムには、セミコロンが2つしかない(変数宣言で1つ、`return`文の終わり)。 | ||
プログラムの規模(lines of code)を測るためにセミコロンを数えるとすると、このプログラムのセミコロンは2つか、それとも3つか曖昧にするため、というネタらしい。 | ||
|
||
型名などを除けば、キーワードは`return`しか使っていない。必然的に、`main`関数の再帰を伴う巨大な式1つからなる`return`文となっている。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
--- | ||
year: 1993 | ||
title: "IOCCC 1993の解説" | ||
layout: contest | ||
--- | ||
## 全体の印象 | ||
|
||
前年の反動か、アスキーアート化された作品やメタな作品は少し減り、挙動の作り込みを追求した作品が増えた。 | ||
[[[1993/dgibson]]]({{ site.baseurl }}{% link 1993/dgibson.md %})はC言語でのライフゲームDSLという新境地を開拓している。 | ||
[[[1993/schnitzi]]]({{ site.baseurl }}{% link 1993/schnitzi.md %})は挙動のインパクトがあって良い。 | ||
[[[1993/rince]]]({{ site.baseurl }}{% link 1993/rince.md %})はオリジナリティのある題材を扱っていて良い。 | ||
|
||
IOCCCの最優秀賞には通例"Best of Show"という賞名が与えられるが、この年は"Most Well Rounded"が最優秀賞と思われる。 | ||
ときどき気分で変わるようだ。IOCCC 1995からまた"Best of Show"に戻る。 | ||
|
||
この年から、ANSI Cコンパイラでコンパイルできることが必須となった。 | ||
おかげで、現代でもそのまま動く確率が非常に高くなった。 | ||
|
||
細かい話だが、これまで`PATH`にカレントディレクトリが含まれているという前提があったのが、この年からついに消えた。 | ||
hintファイルやスクリプトで`./exe`という形式が使われるようになっている(これより前は`exe`だけで実行できるという前提があった)。 | ||
ただし、1994年からまたもとに戻っている。移行期だったのだろうか。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
--- | ||
id: 1993/jonth | ||
year: 1993 | ||
order: 5 | ||
patch: true | ||
authors: "Jon_Thingvold" | ||
orig_url: "https://www.ioccc.org/1993/jonth.c" | ||
hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/jonth.hint" | ||
title: "IOCCC 1993: Most Obfuscated X Program" | ||
award_ja: "もっとも難読化されたXプログラム" | ||
--- | ||
|
||
## 動作 | ||
|
||
X Window Systemでのテトリス。 | ||
|
||
{: .wrap } | ||
``` | ||
$ sed -e s/\^\ /#define/ -e 's/@/Window(D,/g' jonth.c > jonth.tmp.c | ||
$ gcc -DXX1='H 19;}M(J,4)}N H 20;}M(T,4)}q(m,w,' -DXX='XKeycodeToKeysym(D,((XKeyEvent*)o)->keycode,0);K 12:Y();}R;}d XX1' jonth.tmp.c -o jonth -lX11 | ||
$ ./jonth | ||
``` | ||
|
||
{% include img.html src="1993-jonth.png" desc="X Window Systemでテトリス" %} | ||
|
||
<kbd>j</kbd>で左、<kbd>l</kbd>で右、<kbd>k</kbd>で回転、スペースで落とす。 | ||
|
||
## 解説 | ||
|
||
X11の関数名は長いので、sedコマンドで`@`を`Window(D,`に置き換えるなどをした上でコンパイルすることになっている。 | ||
それ以外、コードに特筆することはないと思う。 | ||
|
||
現代で動かすことにとても苦労した。 | ||
なぜか(難読化のため?)、`#include <X11/Xlib.h>`をせず、定数は即値で、構造体は配列インデックスで無理やりアクセスしている。 | ||
関数宣言もないので、返り値は暗黙的に`int`が仮定されてしまう。 | ||
jonth.hintに「`int`とポインタが同じサイズでないと動かない」と書いてあるとおり(`-m32`をつけるとX11とリンクできないので使えなかった)。 | ||
よって、`#include <X11/Xlib.h>`をして`int`を`long`に書き換えれば、とりあえず動いた。 | ||
しかしこれだけではキー入力が効かない。 | ||
構造体のフィールドを`int`の配列インデックスで読みだそうとしているが、`long`に変えたためにずれる模様。 | ||
このコード断片はMakefileの中にある(サイズ制限回避のため?)。 | ||
ややこしいので、直接展開した上で修正した。 | ||
さらに、`XSelectInput`を指定した。 | ||
これによってキー操作もできるようになった。 | ||
ただし、途中でキーボード操作が効かなくなることがある(未調査)。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
--- | ||
id: 1993/leo | ||
year: 1993 | ||
order: 6 | ||
authors: "Leonid_A._Broukhis" | ||
orig_url: "https://www.ioccc.org/1993/leo.c" | ||
hint_url: "https://github.com/ioccc-src/winner/blob/main/1993/leo.hint" | ||
title: "IOCCC 1993: Best Game" | ||
award_ja: "最高のゲーム" | ||
--- | ||
|
||
## 動作 | ||
|
||
[マスターマインド](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%9E%E3%82%A4%E3%83%B3%E3%83%89)のゲームマスターとソルバ。 | ||
実行ファイル名の最後が`d`だとゲームマスターになる。 | ||
|
||
``` | ||
$ gcc -o leo leo.c | ||
$ mv leo mind | ||
$ ./mind | ||
(1296): ??? | ||
``` | ||
|
||
`????`の部分に予想を書くと、その成否を2桁で返す(上の桁は位置も数字も正しい数、下の桁は数字は正しいが位置が違う数)。 | ||
最後まで動かした例を示す。 | ||
|
||
``` | ||
$ ./mind | ||
(1296): 5565 | ||
12 | ||
(240): 5232 | ||
12 | ||
(28): 2225 | ||
04 | ||
(6): 4542 | ||
20 | ||
(2): 1552 | ||
40 | ||
``` | ||
|
||
実行ファイルの最後が`d`以外だとソルバになる。 | ||
|
||
``` | ||
$ mv mind leo | ||
$ ./leo | ||
(1296): 2435 | ||
?? | ||
``` | ||
|
||
`??`のところに成否を2桁で埋めていく。最後まで進めた例を示す | ||
|
||
``` | ||
$ ./leo | ||
(1296): 2435 | ||
01 | ||
(152): 1262 | ||
22 | ||
(7): 1226 | ||
40 | ||
``` | ||
|
||
## 解説 | ||
|
||
カッコの中にある数字は、残る可能性の数を表している。 | ||
|
||
コードはジグザグ形状。特に意味はないと思う。 | ||
ソルバのguessは、特に最短解答を目指すものではなく、乱数生成していると思う。 | ||
実質6行程度であり、わりと短くまとまっていて良い。 | ||
ゲームマスターモードとソルバモードでコードが共有されているのはエレガント。 |
Oops, something went wrong.