背景
Hex是在K×K
六角形菱形菱形上玩的两人抽象策略游戏。菱形的两个相对的边都被涂成白色,另外两个被涂成黑色,两个玩家(黑与白)轮流将其颜色的标记放置在一个空置的瓷砖上。首先设法在其颜色的相对两侧之间建立路径的玩家是获胜者。众所周知,游戏无法以平局告终,并且不管棋盘大小如何,第一位玩家都有获胜的策略(有关详细信息,请参阅Wikipedia页面)。
任务
在此挑战中,我们将板子尺寸固定为K = 4
,并将板子表示为以下网格。粗线表示相邻的图块。
您的任务是为第一个玩家制定一个获胜策略,您可以选择是黑人还是白人。这意味着无论对方球员采取何种合法行动,您的比赛都必须取得胜利。您的输入是一个游戏位置(板上的代币排列),而您的输出是合法移动,采用以下指定的格式。如果您想自己找到一个成功的策略,请不要阅读以下内容:
假设白人先行,则可能的制胜策略概述。 首先选择5。之后,如果您有从5到最底行的路径,或者黑色在任何时候都选择0或1,请选择0或1中的任何一个作为响应。如果黑色选择9或13,则选择10,然后选择14或15中的任何一个。如果黑色未选择9、13或14,则选择9,然后选择13或14中的任一个。如果黑色选择14,则通过选择15进行响应。接下来,如果空白则选择10;否则,选择10。如果黑色选择10,则响应为11。如果黑色选择6,则响应7,然后选择2或3中的任一个。如果黑色未选择6,请选择它,因此您具有从5到最底行的路径。
输入输出
您输入的字符串是16个字符WBE
,代表白色,黑色和空白。它们代表了上面所列举的板块。您可以从以下选项中选择输入法(这也决定了您的输出法):
- 从STDIN输入,输出到STDOUT。
- 输入作为一个命令行参数,输出到STDOUT。
- 输入为16个单字符命令行参数,输出到STDOUT。
- 输入作为命名函数的参数,输出作为返回值。
您的输出代表您放置下一个标记的磁贴,因为该旋转了。您可以从以下输出格式中选择:
- 从零开始的索引(如上图所示)。
- 一个基于索引的索引。
- 输入字符串与一个
E
由两者的替代W
或B
您选择您的播放器。
规则
您的策略必须是确定性的。您不需要使用您的策略来正确处理空局无法到达的游戏位置,或已经为任一位玩家赢得的位置,您可能会因此而崩溃。相反,在使用您的策略可以到达的板上,您必须返回合法举动。
这是代码高尔夫球,因此最低的字节数为准。不允许出现标准漏洞。
测试中
我已经编写了一个Python 3控制器来验证条目,因为手工操作非常繁琐。你可以在这里找到它。它支持前三种输入格式和Python 3函数(必须将其他语言的函数包装到程序中),所有三种输出格式以及这两种播放器。如果某策略没有获胜,它将输出发现的失败游戏,因此您可以调整程序。
Incorrect response 'WWWWWWWWBBBBBBBB' to message 'WWWWWWWWBBBBBBBB'.
我应该早就赢了,还是我错了?