按字符数发布您的最短代码,以检查玩家是否获胜,如果获胜,是哪一个。
假设变量 b
中有一个整数数组(板),放置井字棋板,以及玩家的 Action :
- 0 = 未设置
- 1 = 玩家 1 (X)
- 2 = 玩家 2 (O)
因此,给定数组 b = [ 1, 2, 1, 0, 1, 2, 1, 0, 2 ]
将代表董事会
X|O|X
-+-+-
|X|O
-+-+-
X| |O
对于这种情况,您的代码应输出 1
表示玩家 1 获胜。如果没有人获胜,您可以输出 0
或false
.
我自己的(Ruby)解决方案很快就会推出。
编辑:抱歉,忘记将其标记为社区维基。您可以假设输入格式正确,并且不必进行错误检查。
<小时/>更新:请以函数的形式发布您的解决方案。大多数人已经这样做了,但有些人还没有,这并不完全公平。该板作为参数提供给您的函数。结果应该由函数返回。该函数可以有您选择的名称。
最佳答案
疯狂的 Python 解决方案 - 79 个字符
max([b[x] for x in range(9) for y in range(x) for z in range(y)
if x+y+z==12 and b[x]==b[y]==b[z]] + [0])
但是,这假设 b 中的棋盘位置顺序不同:
5 | 0 | 7
---+---+---
6 | 4 | 2
---+---+---
1 | 8 | 3
即b[5]
代表左上角,依此类推。
要尽量减少上述情况:
r=range
max([b[x]for x in r(9)for y in r(x)for z in r(y)if x+y+z==12and b[x]==b[y]==b[z]]+[0])
93 个字符和一个换行符。
更新:减少到 79 个字符和使用按位 AND 技巧的换行符:
r=range
max([b[x]&b[y]&b[z]for x in r(9)for y in r(x)for z in r(y)if x+y+z==12])
关于code-golf - Code Golf : Tic Tac Toe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245801/