这个挑战是关于井字游戏,但它是在圆环上玩的。
怎么玩
要创建必要的游戏板,请首先使用常规的Tic Tac Toe游戏板。首先,通过连接左右边缘将其折叠成圆柱体。然后通过连接顶部和底部边缘将其折叠成环形。这是这种游戏板的简单可视化效果,其中包含一些操作(病漆技能!)。
井字游戏的规则与普通井字游戏的规则相同。每个玩家交替放置X和O。行,列或对角线中有3个相同符号的第一个获胜。
由于圆环很难观察到,因此我们只需将板子投影回纸上即可。现在我们可以像普通的井字游戏一样玩游戏了。唯一的区别是,您还可以用对角线中的3个相同的符号赢钱。例如,玩家1(X)赢得下一局。通过稍微改变圆环上的视图,您可以轻松看到这一点。
如果您有兴趣,可以在Torus Games的Torus上玩Tic Tac Toe 。有Windows,Mac和Android版本。
最佳游戏
在这个挑战中,人们对最佳游戏感兴趣。最佳游戏是指两个玩家都扮演最佳策略的游戏。在常规的Tic Tac Toe棋盘上,最佳游戏总是以平局结束。令人着迷的是,在环形板上总是第一个玩家获胜。实际上,在圆环板上的游戏永远不会以平局告终(即使玩家玩的不是最佳状态)。
最佳策略非常容易:
- 如果您可以通过放置符号赢钱,那就去做。
- 否则,如果对手在一行/列/对角线中有两个符号,请尝试将其阻止。否则,请执行您想要的操作。
- 否则,请执行您想要的操作。
每个最佳游戏都恰好由7个动作组成,这些动作可以用以下方式描述:
- 玩家1将X放置在棋盘上的任意位置(9个选择)
- 玩家2在棋盘上的任意位置放置一个O(8个选择)
- 玩家1将X放置在棋盘上的任意位置(7个选择)
- 玩家2的举动可能会被强制(1个选择),否则,他会将O放置在任何位置(6个选择)
- 玩家1的举动被迫(1选择)
- 玩家2陷入困境(玩家1可以通过两种不同方式获胜),因此玩家2必须以一种方式阻止玩家1(2个选择)
- 玩家1做出最后的举动并获胜(1个选择)
我们的投影板上有9 * 8 * 1 * 6 * 1 * 2 * 1 + 9 * 8 * 6 * 1 * 1 * 2 * 1 = 1728个不同的最佳游戏。在这里,您可以看到一种典型的最佳游戏:
如果我们用数字标记棋盘的每个单元0-8
,我们可以用数字来描述这个游戏 3518207
。首先,将X放置在单元格3(中间行,左列)中,而不是将O放置在单元格5中(中间行,右列)中,将X放置在单元格1中(上方行,中间列)中,...
使用此数字符号,我们自动生成了一个订单。现在,我们可以对所有1728个最佳游戏进行排序,然后得到以下列表:
Game 0000: 0123845
Game 0001: 0123854
Game 0002: 0124735
Game 0003: 0124753
Game 0004: 0125634
...
Game 0674: 3518207
...
Game 1000: 5167423
Game 1001: 5167432
Game 1002: 5168304
...
Game 1726: 8765034
Game 1727: 8765043
挑战
此列表是您工作的一部分。您将收到一个k
介于0和1727之间的数字,并且您必须以k
该已排序列表的数字符号返回该游戏。
编写一个函数或程序,将接收到的数字k
(整数)计算为对应的游戏。您可以通过STDIN,命令行参数,提示或函数参数读取输入,并以可读格式(例如0123845
或[0, 1, 2, 3, 8, 4, 5]
)打印结果(7位数字),或使用字符串(人类可读格式)或整数(包含所有以10为底的数字)或任何数组/列表格式。
质询类型为代码高尔夫。因此,以最短的代码为准。