引用元:https://www.ioccc.org/2001/dgbeards.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/2001/dgbeards.hint
動作
負けるが勝ちのチェス。
$ gcc -DE=break -DF=char -DK=case -DP=int -DR=return -DI=0xFFFF -o dgbeards dgbeards.c
$ ./dgbeards
+---+---+---+---+---+---+---+---+
8| *R| *N| *B| *Q| *K| *B| *N| *R|
+---+---+---+---+---+---+---+---+
7| *P| *P| *P| *P| *P| *P| *P| *P|
+---+---+---+---+---+---+---+---+
6| | | | | | | | |
+---+---+---+---+---+---+---+---+
5| | | | | | | | |
+---+---+---+---+---+---+---+---+
4| | | | | | | | |
+---+---+---+---+---+---+---+---+
3| | | | | | | | |
+---+---+---+---+---+---+---+---+
2| P | P | P | P | P | P | P | P |
+---+---+---+---+---+---+---+---+
1| R | N | B | Q | K | B | N | R |
+---+---+---+---+---+---+---+---+
K(キング)の前のP(ポーン)を前に出してみる。
チェスでは左列から右列へabcdefgh、下行から上行へ12345678の番号が振られていて、どのマスからどのマスへ移動するかを並べて書く。
この場合はe2e4
。
e2e4
+---+---+---+---+---+---+---+---+
8| *R| *N| *B| *Q| *K| *B| *N| *R|
+---+---+---+---+---+---+---+---+
7| *P| *P| *P| *P| *P| *P| *P| *P|
+---+---+---+---+---+---+---+---+
6| | | | | | | | |
+---+---+---+---+---+---+---+---+
5| | | | | | | | |
+---+---+---+---+---+---+---+---+
4| | | | | P | | | |
+---+---+---+---+---+---+---+---+
3| | | | | | | | |
+---+---+---+---+---+---+---+---+
2| P | P | P | P | | P | P | P |
+---+---+---+---+---+---+---+---+
1| R | N | B | Q | K | B | N | R |
+---+---+---+---+---+---+---+---+
次は相手の番。
AIに打たせるならg
と打つ(ちなみに、自分の手番でもg
でAIに代わりに動かしてもらえるし、相手のコマの動かし方を指定することもできる)。
g
Value 129
+---+---+---+---+---+---+---+---+
8| *R| *N| *B| *Q| *K| *B| *N| *R|
+---+---+---+---+---+---+---+---+
7| *P| *P| *P| *P| *P| | *P| *P|
+---+---+---+---+---+---+---+---+
6| | | | | | | | |
+---+---+---+---+---+---+---+---+
5| | | | | | *P| | |
+---+---+---+---+---+---+---+---+
4| | | | | P | | | |
+---+---+---+---+---+---+---+---+
3| | | | | | | | |
+---+---+---+---+---+---+---+---+
2| P | P | P | P | | P | P | P |
+---+---+---+---+---+---+---+---+
1| R | N | B | Q | K | B | N | R |
+---+---+---+---+---+---+---+---+
ポーンは斜めにコマを取れる。
このチェスでは取れるコマがあるときは必ず取らないといけない。
他のムーブはできない。
e4f5
+---+---+---+---+---+---+---+---+
8| *R| *N| *B| *Q| *K| *B| *N| *R|
+---+---+---+---+---+---+---+---+
7| *P| *P| *P| *P| *P| | *P| *P|
+---+---+---+---+---+---+---+---+
6| | | | | | | | |
+---+---+---+---+---+---+---+---+
5| | | | | | P | | |
+---+---+---+---+---+---+---+---+
4| | | | | | | | |
+---+---+---+---+---+---+---+---+
3| | | | | | | | |
+---+---+---+---+---+---+---+---+
2| P | P | P | P | | P | P | P |
+---+---+---+---+---+---+---+---+
1| R | N | B | Q | K | B | N | R |
+---+---+---+---+---+---+---+---+
g
Value 7
+---+---+---+---+---+---+---+---+
8| *R| *N| *B| *Q| *K| *B| *N| *R|
+---+---+---+---+---+---+---+---+
7| *P| | *P| *P| *P| | *P| *P|
+---+---+---+---+---+---+---+---+
6| | | | | | | | |
+---+---+---+---+---+---+---+---+
5| | *P| | | | P | | |
+---+---+---+---+---+---+---+---+
4| | | | | | | | |
+---+---+---+---+---+---+---+---+
3| | | | | | | | |
+---+---+---+---+---+---+---+---+
2| P | P | P | P | | P | P | P |
+---+---+---+---+---+---+---+---+
1| R | N | B | Q | K | B | N | R |
+---+---+---+---+---+---+---+---+
相手はb5にポーンを動かしてきたが、これはf1のB(ビショップ)で取れるので、それ以外の動きは許されない。
このようにコマを進めあって、合法ムーブがなくなったら(全部のコマが取られたら)勝ち。
なお、キングを取られても終わりではない。
解説
負けたらsegfaultする。
これがこのジャンルのプログラムのスポーツマンシップであろうとのこと。
{
と}
と;
と空白からなる文字列リテラルは、IOCCCのサイズ制限を回避しつつテーブルを埋め込むためのテクニック。