-
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
61 changed files
with
3,995 additions
and
0 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,100 @@ | ||
--- | ||
id: 2005/aidan | ||
year: 2005 | ||
order: 1 | ||
authors: "Aidan_Thornton" | ||
orig_url: "https://www.ioccc.org/2005/aidan/aidan.c" | ||
hint_url: "https://www.ioccc.org/2005/aidan/hint.text" | ||
title: "IOCCC 2005: Most ingenious puzzle solution" | ||
award_ja: "もっとも巧妙なパズルの解" | ||
--- | ||
|
||
## 動作 | ||
|
||
数独のソルバおよび問題作成器。 | ||
|
||
無引数で呼び出して問題を標準入力に与えるとソルバになる。 | ||
|
||
``` | ||
$ gcc -o aidan aidan.c | ||
$ ./aidan < insane1.sudoku | ||
. . 4 | . . . | . 5 6 | ||
5 . . | . 7 2 | . . . | ||
. . 1 | . . . | 8 . . | ||
------+-------+------ | ||
. . . | . . . | . . . | ||
. . . | 6 9 3 | . . 5 | ||
. . . | . . . | 7 3 4 | ||
------+-------+------ | ||
. 5 . | 2 . 1 | 4 . 8 | ||
3 . . | . . . | . . . | ||
. . . | . . . | . 6 1 | ||
7 3 4 | 8 1 9 | 2 5 6 | ||
5 8 6 | 4 7 2 | 9 1 3 | ||
2 9 1 | 3 5 6 | 8 4 7 | ||
------+-------+------ | ||
1 2 3 | 5 4 7 | 6 8 9 | ||
8 4 7 | 6 9 3 | 1 2 5 | ||
9 6 5 | 1 2 8 | 7 3 4 | ||
------+-------+------ | ||
6 5 9 | 2 3 1 | 4 7 8 | ||
3 1 8 | 7 6 4 | 5 9 2 | ||
4 7 2 | 9 8 5 | 3 6 1 | ||
Done (stk 0 3) | ||
``` | ||
|
||
シード付きで起動すると問題を作成する。 | ||
|
||
``` | ||
$ ./aidan 1 | ||
. . . | . . . | . . . | ||
. . . | . . . | . . . | ||
. . . | . . . | . . . | ||
------+-------+------ | ||
. . . | . . . | . . . | ||
. . . | . . . | . . . | ||
. . . | . . . | . . . | ||
------+-------+------ | ||
. . . | . . . | . . . | ||
. . . | . . . | . . . | ||
. . . | . . . | . . . | ||
2 1 3 | 7 8 9 | 4 5 6 | ||
6 4 7 | 5 1 2 | 8 3 9 | ||
8 5 9 | 3 4 6 | 7 2 1 | ||
------+-------+------ | ||
7 8 1 | 4 6 3 | 2 9 5 | ||
3 6 2 | 9 5 8 | 1 4 7 | ||
4 9 5 | 1 2 7 | 3 6 8 | ||
------+-------+------ | ||
9 2 4 | 6 7 1 | 5 8 3 | ||
5 7 6 | 8 3 4 | 9 1 2 | ||
1 3 8 | 2 9 5 | 6 7 4 | ||
Done (stk 44 44) | ||
2 . . | 7 8 . | . . . | ||
6 . . | . . 2 | . 3 9 | ||
8 . . | . . . | . . 1 | ||
------+-------+------ | ||
7 . 1 | . . 3 | . 9 5 | ||
. . . | . . . | . 4 . | ||
. . 5 | . . . | . . 8 | ||
------+-------+------ | ||
. . 4 | . . . | . . . | ||
. . . | . . 4 | 9 . 2 | ||
1 . . | 2 . . | 6 . . | ||
Done (stk 82 6) | ||
``` | ||
|
||
## 解説 | ||
|
||
変な変数名や、`goto`によるわかりにくいフローなど。 | ||
アルゴリズムはブルートフォースではないらしい。詳細未解析。 |
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,77 @@ | ||
--- | ||
id: 2005/anon | ||
year: 2005 | ||
order: 2 | ||
authors: "Anonymous_2005" | ||
orig_url: "https://www.ioccc.org/2005/anon/anon.c" | ||
hint_url: "https://www.ioccc.org/2005/anon/hint.text" | ||
title: "IOCCC 2005: Best 3D puzzle" | ||
award_ja: "最高の3Dパズル" | ||
--- | ||
|
||
## 動作 | ||
|
||
15パズルの任意サイズ化+3D対応。 | ||
|
||
次のように起動すると普通の15パズルになる。 | ||
|
||
``` | ||
$ gcc -o anon anon.c | ||
$ ./anon 4 4 | ||
``` | ||
|
||
``` | ||
15 7 13 2 | ||
10 3 1 5 | ||
## 8 11 6 | ||
14 9 4 12 | ||
``` | ||
|
||
`##`が空きマス。<kbd>j</kbd>と<kbd>l</kbd>で空きマスを左右に動かし、<kbd>i</kbd>と<kbd>k</kbd>で上下に動かす。 | ||
|
||
次のように起動すると3次元化する。 | ||
|
||
``` | ||
$ ./anon 3 3 3 | ||
``` | ||
|
||
``` | ||
7 11 1 | ||
12 9 22 | ||
25 23 4 | ||
18 17 8 | ||
6 14 26 | ||
2 20 13 | ||
10 24 21 | ||
15 19 5 | ||
## 16 3 | ||
``` | ||
|
||
操作方法は2D版に加え、<kbd>o</kbd>で奥方向に動かし、<kbd>n</kbd>で手前方向に動かす。 | ||
|
||
## 解説 | ||
|
||
難読化の一番のポイントとされているのは、変数宣言も`malloc`もせずに動いていること。 | ||
`argc`と`argv`だけでどうにかしているわけでもない。 | ||
どうしているかというと、`main`を再帰させることでスタックを伸ばし、その連続領域をメモリとして使っている。 | ||
スタックが伸びる方向は環境によって違いがあるが、検出して適切に扱っているとのこと。 | ||
|
||
確保された領域は、フレームポインタやリターンアドレスも遠慮なく書き潰されるので、スタックは破壊される。 | ||
そのため`main`関数は正常に`return`はできないので、終了するときは`exit()`を使っている。 | ||
|
||
生成されるパズルは解けないこともある。 | ||
初期版はパリティチェックしていたが、IOCCCのサイズ制限のために除去したとのこと。 | ||
|
||
ゲーム中毒防止のため(?)、また、解けないパズルに無限の時間を使ってしまわないようにするため、長く操作をしているとそのうち異常終了するとのこと。 | ||
操作のたびに`main`を再帰することにより、そのうちスタックオーバーフローするという仕様になっている。 | ||
|
||
ia64でポインタを格納するために`int`ではなく`long`にした、という記述があり、近代になってきた感がある。 | ||
|
||
マクロを使った難読化もいろいろ行われている。 | ||
多くのマクロはサブルーチン的に使われているので、単純にプリプロセスで展開してもわかりやすくならない。 | ||
`main`関数が1つの巨大な`return`文になっているので、indentコマンドをかけるのもほとんど無力。 | ||
hint.textに各マクロやデータ構造の詳細な解説があるので、興味があれば参照するとよい。 | ||
|
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,33 @@ | ||
--- | ||
id: 2005/boutines | ||
year: 2005 | ||
order: 3 | ||
authors: "Francois_Boutines" | ||
orig_url: "https://www.ioccc.org/2005/boutines/boutines.c" | ||
hint_url: "https://www.ioccc.org/2005/boutines/hint.text" | ||
title: "IOCCC 2005: Most superfluous output" | ||
award_ja: "もっとも過剰な出力" | ||
--- | ||
|
||
## 動作 | ||
|
||
2次元の点の集合を入力し、[ボロノイ図](https://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%AD%E3%83%8E%E3%82%A4%E5%9B%B3)をSVGで描く。 | ||
|
||
{: .wrap } | ||
``` | ||
$ gcc -o boutines boutines.c | ||
$ ruby -e '20.times{puts "#{rand} #{rand}"}' | ./boutines > test.svg | ||
$ convert test.svg test.png | ||
``` | ||
|
||
{% include img.html src="2005-boutines.png" desc="ランダムに配置した点に対してボロノイ図を計算した様子" %} | ||
|
||
## 解説 | ||
|
||
審査員が「『生成されたSVGファイルは名前に反してスケーラブルでない』の意味を説明できますか?」という問いを残している。 | ||
SVGはScalable Vector Graphicsの略なのに、巨大なSVGファイルを作るとビューアが重くなってつらい(スケーラブルでない)という意味だと思われる。 | ||
もちろん、SVGのScalableは拡大縮小できるという意味。 | ||
|
||
賞名の意味はわからなかった。 |
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,55 @@ | ||
--- | ||
id: 2005/chia | ||
year: 2005 | ||
order: 4 | ||
authors: "V._Chia" | ||
orig_url: "https://www.ioccc.org/2005/chia/chia.c" | ||
hint_url: "https://www.ioccc.org/2005/chia/hint.text" | ||
title: "IOCCC 2005: Most ambiguous language" | ||
award_ja: "もっとも曖昧な言語" | ||
--- | ||
|
||
## 動作 | ||
|
||
端末に[コッホ曲線](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%83%E3%83%9B%E6%9B%B2%E7%B7%9A)を描く。 | ||
|
||
``` | ||
$ gcc -o chia chia.c | ||
$ ./chia | ||
``` | ||
|
||
``` | ||
..::.. | ||
..:.:: ::.:. | ||
:` `` `` :: | ||
::. .:` | ||
::`:. ::` `:. ::`:. | ||
.:..: `:.:..: `:.:..: `:.:.. | ||
````` `````` `````` ````:: | ||
`: .::` | ||
.:: ::. | ||
::.... ....:: | ||
`:``: .:`:`` | ||
`:. ::` | ||
::` `:. | ||
..::.: `:.::.. | ||
:: :: | ||
``: .:`` | ||
.:: ::. | ||
::.... ...... ...... ....:: | ||
````: `:````: `:````: `:```` | ||
`:::` `:. ::` `:::` | ||
:`` ``: | ||
:.... ....:: | ||
```:: ::``` | ||
``::`` | ||
``` | ||
|
||
## 解説 | ||
|
||
Javaのような見た目のコード。 | ||
素直に読むと、ファイルを読んで各行の長さを出力するように見えるが、実際にはまったく異なる挙動をする。 | ||
コメントにもhint.textにもJavaへの怨嗟で溢れていて面白い。 | ||
|
||
プリプロセスしてindentすれば比較的普通に読める。 |
Oops, something went wrong.