Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 주어진 방향을 한 번 슬라이드 한 후 다음 보드 위치를 찾는 프로그램

<시간/>

초기 보드를 나타내는 2048 게임 보드와 스와이프 방향을 나타내는 문자열 방향이 있다고 가정하면 다음 보드 상태를 찾아야 합니다. 2048 게임에서 알 수 있듯이 우리는 4개의 방향("U", "D", "L" 또는 "R"). 스와이프하면 모든 숫자가 가능한 한 그 방향으로 이동하고 동일한 인접 숫자가 정확히 한 번 더됩니다.

따라서 입력이 다음과 같으면

Python에서 주어진 방향을 한 번 슬라이드 한 후 다음 보드 위치를 찾는 프로그램

방향 ="L", 출력은

Python에서 주어진 방향을 한 번 슬라이드 한 후 다음 보드 위치를 찾는 프로그램

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • 방향이 "R"과 같으면

    • 보드 :=보드를 시계 반대 방향으로 두 번 회전

  • 그렇지 않으면 방향이 "U"와 같을 때

    • 보드 :=보드를 시계 반대 방향으로 한 번 회전

  • 그렇지 않으면 방향이 "D"와 같을 때

    • 보드 :=보드를 시계 반대 방향으로 세 번 회전

  • 범위 0에서 3까지의 i에 대해 수행

    • row :=board[i]

      에 있는 0이 아닌 모든 요소의 목록
    • 0에서 2 사이의 j에 대해 수행

      • j + 1 <행 및 행의 크기[j]가 행[j + 1]과 같으면

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

        • 행 제거[j + 1]

    • 행의 크기가 <4인 동안 수행

      • 행 끝에 0 삽입

    • 보드[i] :=행

  • 방향이 "R"과 같으면

    • 보드 :=보드를 시계 반대 방향으로 두 번 회전

  • 그렇지 않으면 방향이 "U"와 같을 때

    • 보드 :=보드를 시계 반대 방향으로 세 번 회전

  • 그렇지 않으면 방향이 "D"와 같을 때

    • 보드 :=보드를 시계 반대 방향으로 한 번 회전

  • 리턴 보드

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

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]]