为什么我的代码没有返回正确的值?

时间:2019-09-22 13:32:15

标签: python

这是我一直试图解决的代码挑战:

点和盒是通常由两个玩家玩的游戏。它以等距点的空方格开始。两个玩家轮流在两个未连接的相邻点之间添加一条水平或垂直线。一位完成1 x 1盒子第四边的玩家将获得一个积分,并转一圈。当无法放置更多行时,游戏结束。

您的任务是返回完成游戏的两名玩家的得分。

输入 您的函数将接收一个整数对的数组/元组,每个对代表两个点之间的链接。点由整数序列表示,该整数从左到右,从上到下递增,如下所示。

3 x 3正方形

0  1  2

3  4  5

6  7  8

您的函数应返回一个数组/元组,该数组/元组由两个表示两个玩家得分的非负整数组成。

测试示例

moves = ((0,1),(7,8),(1,2),(6,7),(0,3),(8,5),(3,4),(4,1),(4,5),(2,5),(3,6),(7,4))
dots_and_boxes(moves) # should return (3,1)

这是我的尝试:

def dots_and_boxes(ar):
    n = int((max(x for turn in ar for x in turn) + 1) ** 0.5)
    # n is the length of each edge of the given game board
    goals = [[[i, i+1], [i, i + n], [i + 1, i + 1 + n], [i + n, i + n + 1]] for i in range(n ** 2 - n - 1) if (i + 1) % n != 0]
    # goals are all the possible 1x1 squares to get points
    p1_points, p2_points = 0, 0
    turn = True
    board = []
    for move in ar:
        board.append(sorted(list(move)))
        has_goal = False
        for goal in goals:
            if all(x in board for x in goal):
                if turn:
                    p1_points += 1
                else:
                    p2_points += 1
                has_goal = True
                goals.remove(goal)
        turn = turn if has_goal else not turn
    return (p1_points, p2_points)

如果我用描述中的动作来运行我的dots_and_boxes,我会得到(1,2)而不是(3,1)。有人可以解释为什么我的代码失败吗?

0 个答案:

没有答案