Skip to content

Commit

Permalink
Publish spoilers for IOCCC 1994
Browse files Browse the repository at this point in the history
  • Loading branch information
mame committed Feb 27, 2021
1 parent de50537 commit 13b0468
Show file tree
Hide file tree
Showing 37 changed files with 2,020 additions and 0 deletions.
67 changes: 67 additions & 0 deletions 1994/dodsond1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
id: 1994/dodsond1
year: 1994
order: 1
authors: "Don_Dodson"
orig_url: "https://www.ioccc.org/1994/dodsond1.c"
hint_url: "https://github.com/ioccc-src/winner/blob/main/1994/dodsond1.hint"
title: "IOCCC 1994: Best Game"
award_ja: "最高のゲーム"
---

## 動作

オセロ。

```
$ gcc -o dodsond1 dodsond1.c
$ ./dodsond1
A : : : : : : : :
B : : : : : : : :
C : : : : : : : :
D : : :O:X: : : :
E : : :X:O: : : :
F : : : : : : : :
G : : : : : : : :
H : : : : : : : :
1 2 3 4 5 6 7 8
?
```

自分は`O`で、プロンプトに`E3`のように入力して石を置いていく。

```
?E3
A : : : : : : : :
B : : : : : : : :
C : : : : : : : :
D : : :O:X: : : :
E : :O:O:O: : : :
F : : : : : : : :
G : : : : : : : :
H : : : : : : : :
1 2 3 4 5 6 7 8
A : : : : : : : :
B : : : : : : : :
C : : : : : : : :
D : : :O:X: : : :
E : :O:X:O: : : :
F : :X: : : : : :
G : : : : : : : :
H : : : : : : : :
1 2 3 4 5 6 7 8
?
```

## 解説

プログラムがオセロの格子状になっている。
シンプルにまとまった作品。

ネタ自体は[[[1987/lievaart]]]({{ site.baseurl }}{% link 1987/lievaart.md %})と同じだが、自己言及的なアスキーアートでより現代的な作り直しになっている。
72 changes: 72 additions & 0 deletions 1994/dodsond2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
---
id: 1994/dodsond2
year: 1994
order: 2
authors: "Don_Dodson"
orig_url: "https://www.ioccc.org/1994/dodsond2.c"
hint_url: "https://github.com/ioccc-src/winner/blob/main/1994/dodsond2.hint"
title: "IOCCC 1994: Most Obfuscated Packaging"
award_ja: "もっとも難読化されたパッケージング"
---

## 動作

テキストアドベンチャーゲーム。

```
$ gcc -o dodsond2 dodsond2.c
$ ./dodsond2
You are in room 2
Passageways to room 14, 15, and 22
```

部屋番号を入力して進む。

```
You are in room 0
Passageways to room 11, 12, and 28
11
You are in room 11
You smell a wumpus
You hear a rustling sound
Passageways to room 0, 21, and 23
21
You are in room 21
You feel a breeze
Passageways to room 11, 13, and 20
13
You are in room 13
The robber scurries away
You feel a breeze
Passageways to room 14, 17, and 21
21
...
Passageways to room 8, 15, and 28
15
You are in room 15
The bats pick you up and drop you in room 6
You are in room 6
You fell in a pit
Your score is 20
```

落とし穴に落ちてゲームオーバーの例。

## 解説

[Hunt the Wumpus](https://en.wikipedia.org/wiki/Hunt_the_Wumpus)というテキストベースのアドベンチャーゲームを意識して作られている。

目的は、ウンパス(Wumpas)というモンスターを倒すこと。
矢を拾って、モンスターの位置を予測して、隣の部屋から矢を射って当たればクリア。
ウンパスが近くにいると「匂いがする」とう表示が出る(同じ部屋に入ってしまうと食われる)。
コマンドは、`s`で矢を射る、`i`で持っている矢の数を表示するなど。
詳しくはdodsond2.hintを参照。
ダンジョンには他に、落とし穴(即死トラップ)、コウモリ(他の部屋に連れ去られる)、盗賊(持っている矢を盗む)がある。
落とし穴が近いとすきま風を感じたり、コウモリが近いと音が聞こえたりする。
よくできている。

このプログラムは1994年のサイズ制限(空白文字などを除いて1536文字以内)を超えているのだが、gzipで圧縮することでサイズ制限を回避した、とのこと。
現代だとどうも理解しがたい主張だが、gzipは時代の最先端を行く圧縮フォーマットだったので(gzipのバージョン1.0は1993年)、感覚が違ったのかも知れない。
なお、今後は圧縮ツールでサイズ制限を回避したことにするのはダメとのこと。
110 changes: 110 additions & 0 deletions 1994/horton.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
---
id: 1994/horton
year: 1994
order: 3
authors: "Mark_Horton"
orig_url: "https://www.ioccc.org/1994/horton.c"
hint_url: "https://github.com/ioccc-src/winner/blob/main/1994/horton.hint"
title: "IOCCC 1994: Best Utility"
award_ja: "最高のユーティリティ"
---

## 動作

3次関数を端末で描画。y=x^3を描いた例。

```
$ gcc -o horton horton.c
$ ./horton 1 0 0 0
r------------------------------------------------------------r-----,
| j' |
| ,I |
| .F |
| ./ |
| ./ |
| ,' |
| ,/` |
| ._j'` |
| .,-r----'""""" |
| ,/" |
| ./` |
| j' |
| ;' |
| j' |
| ,' |
| .F |
| / |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""`
```

y=5x^2を描いた例。

```
$ ./horton 0 5 0 0
r---------------------,r-----------------------------------------x-,
| Y, /' |
| '\ ./` |
| \, ;' |
| '\. ,/` |
| `\. .r` |
| `\. ,r' |
| "v,. .r'` |
| "--,_ _:j'` |
| '"""'""" |
| |
| |
| |
| |
| |
| |
| |
| |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""`
```

y=50xを描いた例。

```
$ ./horton 0 0 50 0
r---------------------------------------------------------------,r-,
| ,j' |
| .r/` |
| ,j' |
| .r/` |
| ,j' |
| .,/` |
| _/' |
| .,/` |
| _/' |
| .,/` |
| ./' |
| ,/" |
| ./'` |
| ,/" |
| ./'` |
| ,/" |
| ./'` |
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""`
```

## 解説

サブキャラクターレンダリング(高解像度な描画バッファを用意して、いくつかのピクセルをグルーピングして、似た形の文字を使って表現する)によってグラフを表現する。

コードは3の形状。3次関数だからだろうか。
52 changes: 52 additions & 0 deletions 1994/imc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
id: 1994/imc
year: 1994
order: 4
authors: "Ian_Collier"
orig_url: "https://www.ioccc.org/1994/imc.c"
hint_url: "https://github.com/ioccc-src/winner/blob/main/1994/imc.hint"
title: "IOCCC 1994: Most Obfuscated Algorithm"
award_ja: "もっとも難読化されたアルゴリズム"
---

## 動作

魔法陣のランダム生成。

```
$ gcc -o imc imc.c
$ ./imc 3
2 7 6
9 5 1
4 3 8
```

```
$ ./imc
8 21 19 5 12
22 18 1 14 10
20 2 13 6 24
4 15 7 23 16
11 9 25 17 3
```

```
$ ./imc 10
23 16 84 5 87 68 52 75 31 64
17 83 76 14 25 54 73 57 65 41
85 2 88 21 19 46 59 63 67 55
79 15 22 93 6 60 36 69 53 72
86 99 20 7 3 62 70 51 74 33
98 91 9 80 12 43 27 50 56 39
92 8 1 89 100 29 48 32 40 66
10 77 13 96 94 71 34 38 42 30
4 90 97 18 81 35 61 44 28 47
11 24 95 82 78 37 45 26 49 58
```

## 解説

コード形状はわりと普通だが、アルゴリズム自体が難しいので難読とのこと。

`o()``s()``e()`があり、それぞれ3以上の奇数、4ちょうど、6以上の偶数、の縦横の魔法陣を作る関数らしい。詳細未解読だが面白そう。
19 changes: 19 additions & 0 deletions 1994/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
year: 1994
title: "IOCCC 1994の解説"
layout: contest
---
## 全体の印象

非常に洗練された作品が増えた。
挙動を作り込んだだけでは満足できず、最低でもアスキーアート化を行うことが期待されるようになっている。
観客としては、現代風の親しみやすいIOCCCらしさを楽しめるようになってきた。

挙動もオリジナリティあふれるものが多い。
[[[1994/horton]]]({{ site.baseurl }}{% link 1994/horton.md %})のサブキャラクターレンダリングは今後もIOCCCで頻出の手法となった。
[[[1994/schnitzi]]]({{ site.baseurl }}{% link 1994/schnitzi.md %})は自分自身に適用可能なテキストフィルタで、これもIOCCCの定番ネタ。
[[[1994/shapiro]]]({{ site.baseurl }}{% link 1994/shapiro.md %})は`argv[0]`の活用が光る。
[[[1994/westley]]]({{ site.baseurl }}{% link 1994/westley.md %})は発想とコンテンツ力がすばらしい。
一方で[[[1994/ldb]]]({{ site.baseurl }}{% link 1994/ldb.md %})のように小さくきれいにまとめた一品や、[[[1994/smr]]]({{ site.baseurl }}{% link 1994/smr.md %})のような一発ネタも健在。

READMEでは、3人目の審査員や、ウェブサイトのhtmlを書く人が募集されている。
44 changes: 44 additions & 0 deletions 1994/ldb.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
id: 1994/ldb
year: 1994
order: 5
authors: "Laurion_Burchall"
orig_url: "https://www.ioccc.org/1994/ldb.c"
hint_url: "https://github.com/ioccc-src/winner/blob/main/1994/ldb.hint"
title: "IOCCC 1994: Best One-liner"
award_ja: "最高のワンライナー"
---

## 動作

標準入力から1行をランダムに選んで出力する。

```
$ cat rsp.txt
rock
scissors
paper
$ gcc -trigraphs -o ldb ldb.c
$ ./ldb < rsp.txt
rock
$ ./ldb < rsp.txt
paper
$ ./ldb < rsp.txt
rock
$ ./ldb < rsp.txt
scissors
```

## 解説

[trigraph](https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%A9%E3%82%A4%E3%82%B0%E3%83%A9%E3%83%95)を使っているワンライナー。
コードの構造は`while(<cond>);`だけ。

アルゴリズムがちょっと面白い。
1行目は100%の確率で選ぶ、2行目は1/2の確率で選ぶ、3行目は1/3の確率で選ぶ、4行目は1/4の確率で選ぶ、……と進めていき、最後に選んだ行を出力する。
これですべての行を公平に選べる。
Loading

0 comments on commit 13b0468

Please sign in to comment.