在 Python 中滑动一次给定方向后查找下一个棋盘位置的程序

假设我们有一个代表初始棋盘的 2048 游戏棋盘和一个代表滑动方向的字符串方向,我们必须找到下一个棋盘状态。正如我们在 2048 游戏中所知道的,我们得到一个 4 x 4 的数字板(其中一些是空的,这里用 0 表示),我们可以在 4 个方向(“U”、“D”、 “L”或“R”)。当我们滑动时,所有数字都尽可能朝那个方向移动,并且相同的相邻数字恰好相加一次。

所以,如果输入像

方向=“L”,那么输出将是

为了解决这个问题,我们将遵循以下步骤:

  • 如果方向与“R”相同,则

    • board := 逆时针旋转板两次

  • 否则当方向与“U”相同时,则

    • board := 逆时针旋转电路板一次

  • 否则当方向与“D”相同时,则

    • board := 逆时针旋转板 3 次

  • 对于 i 在 0 到 3 的范围内,执行

    • 在行尾插入 0

    • 如果 j + 1 < 行的大小并且 row[j] 与 row[j + 1] 相同,则

    • 行[j] := 行[j] * 2

    • 删除行[j + 1]

    • row := board[i] 上所有非零元素的列表

    • 对于 j 在 0 到 2 的范围内,执行

    • 当行的大小 < 4 时,执行

    • 板[i] := 行

    • 如果方向与“R”相同,则

      • board := 逆时针旋转板两次

    • 否则当方向与“U”相同时,则

      • board := 逆时针旋转板 3 次

    • 否则当方向与“D”相同时,则

      • board := 逆时针旋转电路板一次

    • 返回板

    让我们看看以下实现以更好地理解

    示例

    class Solution:
       def solve(self, board, direction):
          if direction == "R":
             board = rot_anti_clock_dir(rot_anti_clock_dir(board))
          elif direction == "U":
             board = rot_anti_clock_dir(board)
          elif direction == "D":
             board = rot_anti_clock_dir(rot_anti_clock_dir(rot_anti_clock_dir(board)))
    
          for i in range(4):
             row = [x for x in board[i] if x]
             for j in range(3):
                if j + 1 < len(row) and row[j] == row[j + 1]:
                   row[j] *= 2
                   del row[j + 1]
                while len(row) < 4:
                   row += [0]
                board[i] = row
    
          if direction == "R":
             board = rot_anti_clock_dir(rot_anti_clock_dir(board))
          elif direction == "U":
             board = rot_anti_clock_dir(rot_anti_clock_dir(rot_anti_clock_dir(board)))
          elif direction == "D":
             board = rot_anti_clock_dir(board)
          return board
    
    
    def rot_anti_clock_dir(x):
       x = [[x[i][j] for i in range(4)] for j in range(4)]
       return x[::-1]
    
    ob = Solution()
    matrix = [
    [2, 0, 0, 2],
    [2, 2, 2, 2],
    [0, 4, 2, 2],
    [2, 2, 2, 0]]
    print(ob.solve(matrix, "L"))

    输入

    matrix = [
    [2, 0, 0, 2],
    [2, 2, 2, 2],
    [0, 4, 2, 2],
    [2, 2, 2, 0]]
    输出结果
    [
    [4, 0, 0, 0],
    [4, 4, 0, 0],
    [4, 4, 0, 0],
    [4, 2, 0, 0]]