Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで指定された方向を1回スライドした後、次のボード位置を見つけるようにプログラムします


最初のボードを表す2048のゲームボードと、スワイプ方向を表す文字列の方向があるとすると、次のボードの状態を見つける必要があります。 2048ゲームで知っているように、4 x 4の数字のボードが与えられ(そのうちのいくつかは空で、ここでは0で表されます)、4つの方向( "U"、 "D"、 「L」または「R」)。スワイプすると、すべての数字がその方向に可能な限り移動し、同じ隣接する数字が1回だけ加算されます。

したがって、入力が次のような場合

Pythonで指定された方向を1回スライドした後、次のボード位置を見つけるようにプログラムします

direction ="L"の場合、出力は

になります。

Pythonで指定された方向を1回スライドした後、次のボード位置を見つけるようにプログラムします

これを解決するには、次の手順に従います。

  • 方向が「R」と同じ場合、

    • ボード:=ボードを反時計回りに2回回転させます

  • それ以外の場合、方向が「U」と同じ場合、

    • ボード:=ボードを反時計回りに1回回転させます

  • それ以外の場合、方向が「D」と同じ場合、

    • ボード:=ボードを反時計回りに3回回転させます

  • 0から3の範囲のiの場合、実行

    • 行:=ボード[i]

      にあるすべての非ゼロ要素のリスト
    • 0から2の範囲のjの場合、実行

      • j +1<行と行[j]のサイズが行[j+1]と同じである場合、

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

        • 行を削除[j+1]

    • 行のサイズが4未満の場合、実行

      • 行の最後に0を挿入します

    • ボード[i]:=行

  • 方向が「R」と同じ場合、

    • ボード:=ボードを反時計回りに2回回転させます

  • それ以外の場合、方向が「U」と同じ場合、

    • ボード:=ボードを反時計回りに3回回転させます

  • それ以外の場合、方向が「D」と同じ場合、

    • ボード:=ボードを反時計回りに1回回転させます

  • リターンボード

理解を深めるために、次の実装を見てみましょう

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

  1. Pythonで指定されたボールを占めるボックスの位置を見つけます

    2つの配列AとBがあるとします。Aのサイズは行の数であり、A[i]はi番目の行のボックスの数です。また、Bはボールの配列であり、B[i]はボール上の数字を示します。ボールi(値B [i])は、開始からの位置がB[i]であるボックスに配置されます。各B[i]に対応するボックスの行と列を見つける必要があります。 したがって、入力がA =[3、4、5、6]、B =[1、3、5、2]の場合、出力は[(1、1)、(1、3)、( 2、2)、(1、2)] B [0] =1の場合、ボックスの位置は1行目、1列目B [1] =3になり、ボックス位置は1行目、3列目、Bになります。 [2] =5の場合、ボックス

  2. Pythonプログラムで行列の転置を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −行列が与えられたので、行列の転置を表示する必要があります。 行列の転置は、A[i][j]に存在する値をA[j][i]に置き換えることによって得られます。 それでは、以下の実装の概念を見てみましょう- アプローチ1:入力行列の転置を格納するための新しい行列を作成する 例 def transpose(A,B):    for i in range(M):       for j in range(N):