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

Pythonでの歩行ロボットシミュレーション


ポイント(0、0)から始まる無限グリッド上にロボットがあるとします。北向きです。これで、ロボットは3つの可能なタイプのコマンドのいずれかを受け取ることができます-

  1. -2で左に90度回転します
  2. -1で右に90度回転します
  3. x単位進むには1から9までの任意の値
  4. 障害物となるグリッドの正方形がいくつかあります。

また、障害物と呼ばれる別の配列があります。これは、i番目の障害物がグリッドポイント(障害物[i] [0]、障害物[i] [1])にあることを示します。ロボットがそれらの上に移動したい場合、ロボットはオンのままになります。代わりに、前のグリッドの正方形。

ロボットが原点からの最大ユークリッド距離の2乗を見つける必要があります。

したがって、入力がコマンド=[4、-1,4、-2,4]、障害物=[[2,4]]の場合、ロボットは(1、4)でスタックするため、出力は65になります。 )左に曲がって(1、8)に行く前。

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

  • position_offset:=[(0、1)、(1、0)、(0、-1)、(-1、0)]
  • x、y、direction、max_distanceを0として初期化します
  • コマンド内のコマンドごとに、
      を実行します。
    • コマンドが-2と同じ場合、
      • direction:=(direction-1)mod 4
    • それ以外の場合、コマンドが-1と同じ場合、
      • direction:=(direction + 1)mod 4
    • それ以外の場合、
      • (x_off、y_off):=position_offset [direction]
    • コマンドがゼロ以外の場合は、
      • (x + x_off、y + y_off)が障害物にない場合、
        • x:=x + x_off
        • y:=y + y_off
      • コマンド:=コマンド-1
    • max_distance =max_distanceの最大値、x ^ 2 + y ^ 2
  • return max_distance

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

class Solution:
   def robotSim(self, commands, obstacles):
      position_offset = [(0, 1), (1, 0), (0, -1), (-1, 0)]
      obstacles = set(map(tuple, obstacles))
      x, y, direction, max_distance = 0, 0, 0, 0
      for command in commands:
         if command == -2: direction = (direction - 1) % 4
            elif command == -1: direction = (direction + 1) % 4
               else:
                  x_off, y_off = position_offset[direction]
                  while command:
                     if (x + x_off, y + y_off) not in obstacles:
                        x += x_off
                        y += y_off
                     command -= 1
                  max_distance = max(max_distance, x**2 + y**2)
      return max_distance
ob = Solution()
print(ob.robotSim([4,-1,4,-2,4],[[2,4]]))

入力

[4,-1,4,-2,4],[[2,4]]

出力

65

  1. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',

  2. PythonでSimPyを使用した離散イベントシミュレーションの基本

    SimPy(「Blimpie」と韻を踏む)は、プロセス指向の離散イベントシミュレーション用のPythonパッケージです。 インストール SimPyをインストールする最も簡単な方法は、pipを使用することです: pip install simpy そして、あなたが得るかもしれない出力は次のようになります、 執筆時点では、simpy-3.0.11はSimPyの最新バージョンであり、以下のすべての例で使用します。 SimPyがすでにインストールされている場合は、pipの–Uオプションを使用してアップグレードします。 pip install –U simpy 注 :Pyt