赏金
第一名(获奖)
我将为第一个有效答案投入50个报告
2号(获奖)
我将再提供100个最短有效答案。
第3名(开放提交)
我将为第一个报告贡献200个报告,并给出一个有效的简短答案。有效值最多为当前最短答案的45%(564字节x 0.45 = 最大254字节)。
游戏
您还记得经典游戏“ 九个人的莫里斯 ”还是简单的“ 磨坊 ”?有一个变种,叫做“ 三人莫里斯”,有点像易变的井字游戏。
规则
这是游戏的空白板:
a b c
1 [ ]–[ ]–[ ]
| \ | / |
2 [ ]–[ ]–[ ]
| / | \ |
3 [ ]–[ ]–[ ]
[ ]
是一个字段,|–/\
代表这些字段之间的路由。
该游戏由两个玩家扮演1
和2
谁每个地方的板3个令牌。这实际上已经发生了,我们已经参与其中。如果一个玩家可以形成一个游戏,则该游戏获胜。mill
,即该玩家的3个令牌的垂直或水平行,则。
可以根据以下规则沿连接线在板上移动令牌:
到任何相邻的空位置(即,从边缘位置到中心,或从中心到边缘位置,或从边缘位置到相邻边缘位置
除非没有相邻的空位置,否则玩家必须进行移动,在这种情况下,该移动将被跳过。
挑战
您是玩家1
,下一步就是行动。编写确定以下各项的程序或函数:
- 您可以用2个或更少的移动来强制赢(确定赢)
- 如果您的对手犯了一个错误(您可能赢了),您可以用2步或更少的步数获胜
- 您不能以2或更少的步数获胜,因为您需要更多的步数,或者因为强制步法导致您的对手获胜(不可能获胜)
要求
- 即使您在使对手感到无聊时肯定赢了,您的程序也必须在有限的时间内完成。
- 您可以编写程序或函数。
输入值
玩家由1
和表示2
。0
定义一个自由字段。您可以将输入作为矩阵或数组。
定
A B C D
2 1 0 | 2 1 0 | 1 0 1 | 1 2 2
2 1 2 | 0 1 0 | 1 0 2 | 2 1 O
0 0 1 | 2 2 1 | 0 2 2 | O O 1
A: [2,1,0,2,1,2,0,0,1]
B: [2,1,0,0,1,0,2,2,1]
C: [1,0,1,1,0,2,0,2,2]
D: [1,2,2,2,1,0,0,0,1]
可能
A B C
1 0 1 | 1 0 1 | 1 2 2
1 2 2 | 1 2 0 | 0 0 1
2 0 0 | 2 0 2 | 2 1 0
A: [1,0,1,1,2,2,2,0,0]
B: [1,0,1,1,2,0,2,0,2]
C: [1,2,2,0,0,1,2,1,0]
不可能
A B
1 0 0 | 1 2 0
1 2 2 | 2 1 0
2 0 1 | 1 2 0
A: [1,0,0,1,2,2,2,0,1]
B: [1,2,0,2,1,0,1,2,0]
输出量
您的程序应输出/返回一个笑脸:
- 绝对胜利:
:)
- 可能的胜利:
:|
- 不可能赢:
:(
例子
绝对有两步制胜:
[2][1][ ] 1. [2][1][ ]
[2][1][2] -> [2][1][2]
[ ][ ][1] [ ][1][ ]
[2][1][ ] 1. [2][1][ ] [ ][1][ ] 2. [ ][ ][1]
[ ][1][ ] -> [ ][ ][1] -> [2][ ][1] -> [2][ ][1]
[2][2][1] [2][2][1] [2][2][1] [2][2][1]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][ ][2] -> [1][ ][2] -> [1][ ][2] -> [ ][ ][2]
[ ][2][2] [ ][2][2] [2][ ][2] [2][ ][2]
可能有两步获胜:
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][2][2] 1. [ ][2][2] [2][ ][2] 2. [1][2][2]
[ ][ ][1] -> [1][ ][1] -> [1][ ][1] -> [1][1][1]
[2][1][ ] [2][1][ ] [2][1][ ] [2][ ][ ]
不可能通过以下两个步骤获胜:
[1][ ][ ]
[1][2][2]
[2][ ][1]
奖金
如果有可能获得确定的胜利,并且您的程序输出一种成功的方式a1:a2
(如1 a1:a2,a3:b2
步或2步),则可以提取30%的字节数。
这就是代码高尔夫–以字节为单位的最短答案将获胜。不允许出现标准漏洞。
感谢Peter Taylor,他修复了一些缺陷并改进了沙箱中的措辞。
[1,0,0,2,1,0,2,2,1]
,玩家2无法移动-这是玩家1的胜利吗?