卷上卷队——钟某人刷题的day18——力扣:有效的井字游戏

给你一个字符串数组 board 表示井字游戏的棋盘。当且仅当在井字游戏过程中,棋盘有可能达到 board 所显示的状态时,才返回 true 。

井字游戏的棋盘是一个 3 x 3 数组,由字符 ' ','X' 和 'O' 组成。字符 ' ' 代表一个空位。

以下是井字游戏的规则:

玩家轮流将字符放入空位(' ')中。
玩家 1 总是放字符 'X' ,而玩家 2 总是放字符 'O' 。
'X' 和 'O' 只允许放置在空位中,不允许对已放有字符的位置进行填充。
当有 3 个相同(且非空)的字符填充任何行、列或对角线时,游戏结束。
当所有位置非空时,也算为游戏结束。
如果游戏结束,玩家不允许再放置字符。

我的思路是,将这些规则打包起来,然后再调用,出错了就直接抛出

我真的是搞崩溃了都,搞到半夜一点,最后看到通过这两个字我真的是……想哭,又想笑,不说了,上代码

class Solution:
    def validTicTacToe(self, board: List[str]) -> bool:
        countx = 0
        counto = 0
        for i in board:
            countx += i.count('X')
            counto += i.count('O')
 
        def rule1(board):
            # 对第一句话进行判断
            if countx - counto > 1 or counto > countx:
                return bool(0)
 
 
        def rule2(board):
            # 对第二句话进行判断
            if counto == 1 and countx == 0:
                return bool(0)
 
 
        def rule3(board):
            # 对第三句话进行判断
            judge = 0  # 用于判断board中有几个长度小于或等于3的字符串
            cache = []
            for j in range(3):
                try:
                    cache.append(board[j][3])
                    cache.clear()
                except:
                    judge += 1
            if judge < 3:
                return bool(0)
 
 
        def rule4(board):
            # 对第四句话进行判断
            if 'XXX' in board or 'OOO' in board or board[0][0] == board[1][1] == board[2][2] or board[0][2] == board[1][1] == board[2][
                0] or board[0][0] == board[1][0] == board[2][0] or board[0][1] == board[1][1] == board[2][1] or board[0][2] == \
                    board[1][2] == board[2][2]:
                return bool(1)
 
 
 
        def rule5(board):
            # 对第五句话进行判断
            if counto + countx == 9:
                return bool(1)
 
 
        def rule6(board):
                xwin = 'XXX' in board or board[0][0] == board[1][1] == board[2][2] == 'X' or board[0][2] == board[1][1] == board[2][
        0]=='X' or board[0][0] == board[1][0] == board[2][0]=='X' or board[0][1] == board[1][1] == board[2][1]=='X' or board[0][2] == \
            board[1][2] == board[2][2]=='X'
                owin = 'OOO' in board or board[0][0] == board[1][1] == board[2][2]== 'O' or board[0][2] == board[1][1] == board[2][
                    0]=='O' or board[0][0] == board[1][0] == board[2][0]=='O' or board[0][1] == board[1][1] == board[2][1]=='O' or board[0][2] == \
                        board[1][2] == board[2][2]=='O'
                if xwin and owin:
                    return bool(0)
                elif owin:
                    if countx == counto + 1:
                        return bool(0)
                elif xwin:
                    if countx == counto:
                        return bool(0)
 
 
        rule_list = [rule1(board),rule2(board),rule3(board),rule4(board),rule5(board),rule6(board)]
        if bool(0) in rule_list[:3]or bool(0)==rule6(board):
            return bool(0)
        else:
            return bool(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值