引用元:https://www.ioccc.org/1996/gandalf.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1996/gandalf.hint
動作
ASCII表を出す。
$ gcc -o gandalf gandalf.c
$ ./gandalf
0123456789ABCDEF
2 !"#$%&'()*+,-./
3 0123456789:;<=>?
4 @ABCDEFGHIJKLMNO
5 PQRSTUVWXYZ[\]^_
6 `abcdefghijklmno
7 pqrstuvwxyz{|}~
8 ����������������
9 ����������������
A ����������������
B ����������������
C ����������������
D ����������������
E ����������������
F ����������������
argv[0]
の先頭の文字がASCIIコードで偶数のときは8 bit文字の範囲を表示しなくなる。
$ PATH=. hatcat
0123456789ABCDEF
2 !"#$%&'()*+,-./
3 0123456789:;<=>?
4 @ABCDEFGHIJKLMNO
5 PQRSTUVWXYZ[\]^_
6 `abcdefghijklmno
7 pqrstuvwxyz{|}~
解説
このプログラムについては、ネタもコードもあまり理解できていない。
英語圏で著名な絵本作家である、Dr. Seussの絵本がネタになっている。
冒頭のdo you like (green eggs and ham++)?
のあたりはGreen Eggs and Hamのセリフで、アスキーアートになっているのはThe Cat in the Hatの猫。
しかしこれらが「ASCII表を表示する」という挙動と関係があるのかはわからなかった。
パッチ前の状態では、マクロ定義に#
が含まれているなどでコンパイルエラーになる。
他にもいろいろと壊れたプログラムになっていて、C89からすでに7年経っていた当時、どういうコンパイラがこのコードをコンパイルできていたのかわからない。
おそらく、do
で始まる行は無視されることが想定されているように見える。
少なくとも実行には意味がなさそうなので、関連箇所を削除することでコンパイルはできた。
パッチ
パッチをダウンロード