引用元:https://www.ioccc.org/1993/leo.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1993/leo.hint
動作
マスターマインドのゲームマスターとソルバ。
実行ファイル名の最後が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行程度であり、わりと短くまとまっていて良い。
ゲームマスターモードとソルバモードでコードが共有されているのはエレガント。