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


假设我们有一个表示初始棋盘的 2048 游戏棋盘和一个表示滑动方向的字符串,我们需要找到下一个棋盘状态。众所周知,在 2048 游戏中,我们得到一个 4 x 4 的数字棋盘(其中一些是空的,这里用 0 表示),我们可以向四个方向中的任意一个滑动(“U”、“D”、“L”或“R”)。当我们滑动时,所有数字都尽可能地向该方向移动,并且相同的相邻数字恰好加起来一次。

因此,如果输入类似于

direction = "L",则输出将为

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

  • 如果 direction 等于 "R",则

    • board := 将棋盘逆时针旋转两次

  • 否则,当 direction 等于 "U" 时,则

    • board := 将棋盘逆时针旋转一次

  • 否则,当 direction 等于 "D" 时,则

    • board := 将棋盘逆时针旋转三次

  • 对于 i 从 0 到 3,执行

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

    • 对于 j 从 0 到 2,执行

      • 如果 j + 1 小于 row 的大小且 row[j] 等于 row[j + 1],则

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

        • 移除 row[j + 1]

    • 当 row 的大小小于 4 时,执行

      • 在 row 的末尾插入 0

    • board[i] := row

  • 如果 direction 等于 "R",则

    • board := 将棋盘逆时针旋转两次

  • 否则,当 direction 等于 "U" 时,则

    • board := 将棋盘逆时针旋转三次

  • 否则,当 direction 等于 "D" 时,则

    • board := 将棋盘逆时针旋转一次

  • 返回 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]]

更新于: 2020年11月9日

133 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告