鱼C论坛

 找回密码
 立即注册
查看: 4224|回复: 3

[技术交流] [checkio]---井字游戏---

[复制链接]
发表于 2015-3-21 13:29:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
井字游戏,有时也被称为“进攻和防守”,是一个两人玩家(X和O)轮流标志着3×3的网格的空间的连珠游戏。最先在任意一条直线(水平线,垂直线或对角线)上成功连接三个标记的一方获胜。

但我们不去玩这个游戏。你将是这个游戏的裁判。你被赋予游戏的结果,以及你必须判断游戏是平局还是有人胜出,以及谁将会成为最后的赢家。如果X玩家获胜,返回“X”。如果O玩家获胜,返回“O”。如果比赛是平局,返回“D”。
x-o-referee.png
游戏的结果是作为字符串形式的列表,其中“X”和“O”是玩家的标志,“.”是空格。

输入: 游戏结果作为字符串形式的列表(Unicode)。

输出: “X”,“O”或“D”作为字符串形式。

范例:
  1. checkio([
  2.     "X.O",
  3.     "XX.",
  4.     "XOO"]) == "X"
  5. checkio([
  6.     "OO.",
  7.     "XOX",
  8.     "XOX"]) == "O"
  9. checkio([
  10.     "OOX",
  11.     "XXO",
  12.     "OXX"]) == "D"
复制代码



评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +4 收起 理由
拈花小仙 + 5 + 5 + 4

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-21 13:49:11 | 显示全部楼层
本帖最后由 戴宇轩 于 2015-3-21 13:51 编辑

狂用判断, 但是速度还行。。。
  1. def checkio(data):
  2.     if 'XXX' in data:
  3.         return 'X'
  4.     if 'OOO' in data:
  5.         return 'O'
  6.     if data[0][0] + data[1][1] + data[2][2] == 'XXX':
  7.         return 'X'
  8.     if data[0][0] + data[1][1] + data[2][2] == 'OOO':
  9.         return 'O'
  10.     if data[0][2] + data[1][1] + data[2][0] == 'XXX':
  11.         return 'X'
  12.     if data[0][2] + data[1][1] + data[2][0] == 'OOO':
  13.         return 'O'
  14.     if data[0][0] + data[1][0] + data[2][0] == 'XXX':
  15.         return 'X'
  16.     if data[0][1] + data[1][1] + data[2][1] == 'XXX':
  17.         return 'X'
  18.     if data[0][2] + data[1][2] + data[2][2] == 'XXX':
  19.         return 'X'
  20.     if data[0][0] + data[1][0] + data[2][0] == 'OOO':
  21.         return 'O'
  22.     if data[0][1] + data[1][1] + data[2][1] == 'OOO':
  23.         return 'O'
  24.     if data[0][2] + data[1][2] + data[2][2] == 'OOO':
  25.         return 'O'
  26.     return 'D'
复制代码

评分

参与人数 1鱼币 +2 收起 理由
挥舞乾坤 + 2 速度真快,刚发出来不到半个小时,就搞定了,.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-21 15:29:11 | 显示全部楼层
我的版本:
  1. def checkio(data):
  2.     path = data + [''.join(e) for e in zip(*data)]
  3.     path += [''.join(e) for e in zip(*[(data[i][i],data[i][j]) for i, j in enumerate(range(2, -1, -1))])]
  4.     print(path)
  5.     if 'XXX' in path:
  6.         return 'X'
  7.     elif 'OOO' in path:
  8.         return 'O'
  9.     else:
  10.         return 'D'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-21 15:36:30 | 显示全部楼层
最多赞的版本:
  1. def checkio(result):
  2.     rows = result
  3.     cols = map(''.join, zip(*rows))
  4.     diags = map(''.join, zip(*[(r[i], r[2 - i]) for i, r in enumerate(rows)]))
  5.     lines = rows + list(cols) + list(diags)
  6. ​
  7.     return 'X' if ('XXX' in lines) else 'O' if ('OOO' in lines) else 'D'
复制代码


跟我的版本思路是差不多的,但是代码更优雅,map函数的灵活使用,和return的部分(以前只知道一个else可以这样写..),值得学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 00:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表