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

Pythonで訪問した場所を移動し続けることでロボットが目標に到達できることを確認するプログラム


現在、位置(0、0)(デカルト平面)に座っているロボットがあるとします。 N(北)、S(南)、W(西)、E(東)を含む、移動可能な移動のリストがある場合。ただし、ロボットが以前の場所に到達した場合、ロボットは新しい未訪問の場所に到達するまで同じ方向に移動し続けます。移動後、(x、y)座標で終了するかどうかを確認する必要があります。

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

Pythonで訪問した場所を移動し続けることでロボットが目標に到達できることを確認するプログラム

move =['N'、'N'、'E'、'N'、'W'、'S']、coord =[0、-1]の場合、ロボットは2つ進むため、出力はTrueになります。上、右、上、左、下、現在の位置にアクセスすると下に移動し、次にその場所にもアクセスし、再び下に移動するので、位置(0、-1)で停止します

>

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

  • ny:=0、nx:=0

  • l:=新しいセット、最初に座標(0、0)を挿入

  • 移動のkごとに、実行します

    • kが「N」と同じ場合

      • (nx、ny)in l、do

        • ny:=ny + 1

    • それ以外の場合、kが「S」と同じである場合

      • (nx、ny)in l、do

        • ny:=ny − 1

    • それ以外の場合、kが「E」と同じである場合

      • (nx、ny)in l、do

        • nx:=nx + 1

    • それ以外の場合

      • (nx、ny)in l、do

        • nx:=nx − 1

    • add(nx、ny)into l

  • coordが(nx、ny)と同じ場合はtrueを返し、それ以外の場合はfalseを返します

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

class Solution:
   def solve(self, moves, coord):
      ny = nx = 0
      l = {(0, 0)}
      for k in moves:
         if k == "N":
            while (nx, ny) in l:
               ny += 1
         elif k == "S":
            while (nx, ny) in l:
               ny -= 1
         elif k == "E":
            while (nx, ny) in l:
               nx += 1
         else:
            while (nx, ny) in l:
               nx -= 1
         l.add((nx, ny))
      return coord[0] == nx and coord[1] == ny

ob = Solution()
moves = ['N','N','E','N','W','S']
coord = [0,-1]
print(ob.solve(moves, coord))

入力

['N','N','E','N','W','S'], [0,-1]

出力

True

  1. Pythonでロボットが目標位置に到達できるかどうかをチェックするプログラム

    現在、位置(0、0)(デカルト平面)に座っているロボットがあるとします。 N(北)、S(南)、W(西)、およびE(東)を含む、実行可能な移動のリストがある場合。宛先座標(x、y)に到達できるかどうかを確認する必要があります。 したがって、入力がmoves =[N、N、E、E、S]、(x、y)=(2,1)のような場合、出力はTrueになります。 これを解決するには、次の手順に従います- temp_coord:=[0,0] 移動の移動ごとに、 移動が「N」と同じ場合、 temp_coord [1]:=temp_coord [1] + 1 それ以外の場合、移動が「S」と同じ

  2. Pythonで単語のリストによってターゲットを綴ることができるかどうかをチェックするプログラム

    numsと呼ばれる数のリストと別の数kがあるとします。インデックスkと任意のインデックスiから開始する場合、正確にnums[i]ステップ数だけ左または右に進むことができます。リストの最後に到達できるかどうかを確認する必要があります。 したがって、入力がnums =[0、0、2、1、3、3、1、1] k =2の場合、インデックス2から開始してから、インデックス4にジャンプするかのように、出力はTrueになります。次に、最後のインデックス7にジャンプします。 これを解決するために、次の手順に従います- n:=numsのサイズ 訪問:=サイズnのリストで0を入力 tovisit