code-golf - Code Golf : Tic Tac Toe

标签 code-golf rosetta-stone tic-tac-toe

按字符数发布您的最短代码,以检查玩家是否获胜,如果获胜,是哪一个。

假设变量 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 获胜。如果没有人获胜,您可以输出 0false .

我自己的(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/

相关文章:

language-agnostic - Code Golf : Happy Primes!

c++ - 井字游戏帮助

c++ - 井字游戏 AI : How to Make the Tree?

language-agnostic - 高尔夫代码: hive

language-agnostic - Code Golf : Seven Segments

javascript - 乱码功能大赛

language-agnostic - Code Golf : Morris Sequence

c++ - 五子棋(5 合一行)计算机逻辑

language-agnostic - Code Golf : Number to Words

language-agnostic - 将十进制数字转换为类似于Excel header 的数字