Best Game

最高のゲーム

受賞者:Leonid A. Broukhis

引用元: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行程度であり、わりと短くまとまっていて良い。 ゲームマスターモードとソルバモードでコードが共有されているのはエレガント。