CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。

CheckiO 官网:https://checkio.org/

我的 CheckiO 主页:https://py.checkio.org/user/TRHX/

CheckiO 题解系列专栏:https://itrhx.blog.csdn.net/category_9536424.html

CheckiO 所有题解源代码:https://github.com/TRHX/Python-CheckiO-Exercise


题目描述

【Xs and Os Referee】:井字游戏,两个玩家(X和O)轮流在 3×3 的网格上落棋,最先在任意一条直线(水平线,垂直线或对角线)上成功连接三个网格的一方获胜。在本题中,你将是这个游戏的裁判。你必须判断游戏是平局还是有人胜出,以及谁将会成为最后的赢家。如果 X 玩家获胜,返回“X”。如果 O 玩家获胜,返回“O”。如果比赛是平局,返回“D”。

【链接】:https://py.checkio.org/mission/x-o-referee/

【输入】:“X”,“O”在棋盘上的位置,“.”表示空格(列表)

【输出】:获胜的一方,“X”,“O”或“D”(字符串)

【范例】

checkio(["X.O","XX.","XOO"]) == "X"
checkio(["OO.","XOX","XOX"]) == "O"
checkio(["OOX","XXO","OXX"]) == "D"

解题思路

判断谁赢有 6 种情况,横着 3 种,竖着 3 种,斜着 2 种,我用了最笨的办法,直接将每颗棋子转换成列表,依次判断是否相等就行了,就是不断的用 if 语句,另外也可以分横竖和斜着两种情况来写代码,这样的话,横竖可以设置一个变量,循环 3 次,利用类似于 game_result[i][0]game_result[i][1] 来依次比较,需要特别注意的是,要排除三个空格,也就是三个相同 . 的情况

代码实现

from typing import Listdef checkio(game_result: List[str]) -> str:list2 = []for i in game_result:list2.extend(list(i))if list2[0] != '.' and (list2[0] == list2[3] == list2[6] or list2[0] == list2[4] == list2[8] or list2[0] == list2[1] == list2[2]):return list2[0]elif list2[1] != '.' and (list2[1] == list2[4] == list2[7]):return list2[1]elif list2[2] != '.' and (list2[2] == list2[4] == list2[6] or list2[2] == list2[5] == list2[8]):return list2[2]elif list2[3] != '.' and (list2[3] == list2[4] == list2[5]):return list2[3]elif list2[6] != '.' and (list2[6] == list2[7] == list2[8]):return list2[6]else:return 'D'if __name__ == '__main__':print("Example:")print(checkio(["X.O","XX.","XOO"]))# These "asserts" using only for self-checking and not necessary for auto-testingassert checkio(["X.O","XX.","XOO"]) == "X", "Xs wins"assert checkio(["OO.","XOX","XOX"]) == "O", "Os wins"assert checkio(["OOX","XXO","OXX"]) == "D", "Draw"assert checkio(["O.X","XX.","XOO"]) == "X", "Xs wins again"print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")

大神解答

大神解答 NO.1

def checkio(result):rows = resultcols = map(''.join, zip(*rows))diags = map(''.join, zip(*[(r[i], r[2 - i]) for i, r in enumerate(rows)]))lines = rows + list(cols) + list(diags)return 'X' if ('XXX' in lines) else 'O' if ('OOO' in lines) else 'D'

大神解答 NO.2

# From Daniel Dou with love...def checkio(board):# First we put everything together into a single stringx = "".join(board)# Next we outline the 8 possible winning combinations. combos = ["012", "345", "678", "036", "147", "258", "048", "246"]# We go through all the winning combos 1 by 1 to see if there are any# all Xs or all Os in the combosfor i in combos:if x[int(i[0])] == x[int(i[1])] == x[int(i[2])] and x[int(i[0])] in "XO":return x[int(i[0])]return "D"

大神解答 NO.3

# migrated from python 2.7
def checkio(game_result):sample = "".join(game_result)data = game_result + [sample[i:9:3] for i in range(3)] + [sample[0:9:4], sample[2:8:2]]if "OOO" in data:return "O"elif "XXX" in data:return "X"else:return "D"

大神解答 NO.4

def checkio(game_result):patterns = [] + game_resultsize = len(game_result)for col in range(size):patterns.append(''.join([game_result[row][col] for row in range(size)]))patterns.append(''.join([game_result[x][x] for x in range(size)]))patterns.append(''.join([game_result[x][size - x - 1] for x in range(size)]))return 'X' if 'XXX' in patterns else 'O' if 'OOO' in patterns else 'D'

大神解答 NO.5

def checkio(game_result):result = 'D'if game_result[0][0] == game_result[1][1] == game_result[2][2] and game_result[0][0] != '.':result = game_result[0][0]return resultif game_result[2][0] == game_result[1][1] == game_result[0][2] and game_result[2][0] != '.':result = game_result[2][0]return result    for i in range(3):if game_result[i][0] == game_result[i][1] == game_result[i][2] and game_result[i][0] != '.':result = game_result[i][0]breakif game_result[0][i] == game_result[1][i] == game_result[2][i] and game_result[0][i] != '.':result = game_result[0][i]breakreturn result

【Python CheckiO 题解】Xs and Os Referee相关推荐

  1. Python CheckiO 题解系列 丨 博客目录索引

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本题解系列主要记录自己在用 Python 闯关时的做 ...

  2. 【Python CheckiO 题解】Army Battles

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  3. 【Python CheckiO 题解】Date and Time Converter

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  4. 【Python CheckiO 题解】Largest Rectangle in a Histogram

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  5. 【Python CheckiO 题解】Roman Numerals

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  6. 【Python CheckiO 题解】Probably Dice

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  7. 【Python CheckiO 题解】Multicolored Lamp

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  8. 【Python CheckiO 题解】Time Converter (12h to 24h)

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  9. 【Python CheckiO 题解】Speech Module

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

最新文章

  1. linux文件的权限模式,Linux文件权限和访问模式
  2. Exchange Server 2013之CAS服务器NLB负载均衡
  3. it程序员刷题 面试 中文网站收集
  4. How to open robotium-solo-1.4.0 javadoc.jar to get the information of robotium.
  5. C语言百度翻译API的使用,c语言怎么翻译? 程序怎么运行?
  6. python做自动化测试的优点_乐搏讲自动化测试-python语言特点及优缺点(5)
  7. 技本功丨用短平快的方式告诉你:Flink-SQL的扩展实现...
  8. 【Latex】数学公式排版
  9. JS Jquery 中 的遍历
  10. 思科ccna教材_什么是CCNA或Cisco认证网络助理?
  11. 【Python练习】乌龟吃鱼小游戏
  12. 鼠标键盘的使用:用左ALT+左SHIFT+NUM LOCK即可启动或关闭键盘的鼠标键
  13. c语言中输入n一个整数存入一维数组,编写程序输入n个整数到一维数组(先输入数据的个数n,再输入n个数据),然后以输入的顺序输出这些数。...
  14. VLOG的文字遮罩(利用文字显示内部)
  15. java double 占位符_Java输出格式化之占位符
  16. 社区团购新一轮“烧钱”大战又要开始?
  17. 移动端px和rem的换算
  18. Visual GDB基本使用
  19. 【题解】【AcWing】1579. 插入还是归并
  20. 自定义AXI IP核实验——FPGA Vitis篇

热门文章

  1. Android成长日记-Android布局优化
  2. System.Drawing.Color.FromArgb(144,238,255);
  3. 90 Subsets II
  4. codeUp 2031 To fill or not to fill 复杂贪心
  5. java监听器原理_java监听器原理
  6. java 并发 主键_高并发数据库自增主键分析
  7. php在html中生成option,使用PHP可以将HTML SELECT/OPTION值设为NULL吗?
  8. java的string访问某个元素_CSS伪类与伪元素总是傻傻分不清,这份总结够面试用了
  9. linux 管道文件上机总结,[转载]LINUX 管道 fifo 等总结
  10. mysql-8.0.12语法_mysql-8.0.12 (免安装版) 安装详解