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

Python의 보행 로봇 시뮬레이션

<시간/>

점 (0, 0)에서 시작하는 무한 그리드에 로봇이 있다고 가정합니다. 북향을 향하고 있습니다. 이제 로봇은 세 가지 가능한 명령 유형 중 하나를 받을 수 있습니다.

  1. -2:좌회전 90도
  2. -1:우회전 90도
  3. x 단위 앞으로 이동하려면 1에서 9 사이의 값
  4. 장애물이 되는 격자 사각형이 있습니다.

우리는 또한 장애물이라는 또 다른 배열을 가지고 있습니다. 이것은 i번째 장애물이 그리드 포인트에 있음을 나타냅니다(장애물[i][0], 장애물[i][1]). 로봇이 장애물 위로 이동하려는 경우 로봇은 계속 켜져 있습니다. 대신 이전 그리드 사각형을 사용합니다.

로봇이 원점에서 이동할 최대 유클리드 거리의 제곱을 찾아야 합니다.

따라서 입력이 명령 =[4,-1,4,-2,4], 장애물 =[[2,4]]인 경우 로봇이 (1, 4)에서 멈추기 때문에 출력은 65가 됩니다. ) 좌회전하여 (1, 8)로 이동하기 전에.

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

  • 위치 오프셋 :=[(0, 1) ,(1, 0) ,(0, -1) ,(-1, 0) ]
  • x, y, 방향, max_distance를 0으로 초기화
  • 명령의 각 명령에 대해 다음을 수행합니다.
    • 명령이 -2와 같으면
      • 방향 :=(방향 - 1) 모드 4
    • 그렇지 않으면 명령이 -1과 같을 때
      • 방향 :=(방향 + 1) 모드 4
    • 그렇지 않으면
      • (x_off, y_off) :=position_offset[방향]
    • 명령이 0이 아닌 동안 do
      • 만약 (x + x_off, y + y_off)가 장애물에 없으면
        • x :=x + x_off
        • y :=y + y_off
      • 명령어 :=명령 - 1
    • max_distance =max_distance의 최대값, x^2 + y^2
  • 최대 거리 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class 솔루션:def robotSim(self, 명령, 장애물):position_offset =[(0, 1), (1, 0), (0, -1), (-1, 0)] 장애물 =set(map (튜플, 장애물)) x, y, 방향, max_distance =0, 0, 0, 0 명령의 명령:if 명령 ==-2:방향 =(방향 - 1) % 4 elif 명령 ==-1:방향 =(방향 + 1) % 4 else:x_off, y_off =position_offset[방향] 동안 명령:if (x + x_off, y + y_off) 장애물에 있지 않음:x +=x_off y +=y_off 명령 -=1 max_distance =최대 (max_distance, x**2 + y**2) return max_distanceob =Solution()print(ob.robotSim([4,-1,4,-2,4],[[2,4]])) 

입력

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

출력

65