TL; DR : 배열의 시작 위치에 문자 배열과 로봇이 주어지면 움직임이있는 문자열을 읽을 수있는 것보다 알고리즘을 작성하십시오 (
F
"앞으로 이동",R
"90도 오른쪽으로 회전"및L
"90도 회전) 왼쪽 ") 로봇의 끝 위치를 계산합니다. 자세한 내용은 자세한 내용을 참조하십시오.
우리는 집에서 아이들을위한 매우 간단한 프로그램 가능한 장치를 가지고 있습니다. 이것과 비슷한 것 :
우리는 또한 다음과 같은 글자가있는 거품 매트를 가지고 있습니다 :
이 모든 것의 목적은 아이들에게 알파벳과 프로그래밍의 기초를 동시에 가르치는 것입니다.
도전
다음과 같이 폼 매트를 무작위로 배열했다고 가정하십시오.
+---+---+---+---+---+---+---+
| E | R | L | B | I | X | N |
+---+---+---+---+---+---+---+
| O | A | Q | Y | C | T | G |
+---+---+---+---+---+---+---+
| F | W | H | P | D | Z | S |
+---+---+---+---+---+---+---+
| K | V | U | M | J |
+---+---+---+---+---+
| |
+---+
"앞으로 이동"명령을 프로그래밍 할 때 차량이 매트에서 정확히 한 정사각형 크기로 진행되도록 차량을 수정했다고 가정 해 봅시다. 따라서 차량이 U
정사각형에 있고 북쪽으로 가면 P
정사각형에 정확하게 멈 춥니 다 .
지시 사항은 차량이 움직이기 전에 차량에 제공되며 다음과 같습니다.
F
: 차량이 다음 광장으로갑니다.R
: 차량이 그 자리에서 오른쪽으로 90도 회전합니다 (추가 이동 없음).L
: 차량이 그 자리에서 왼쪽으로 90도 회전합니다 (추가 이동 없음).
지시 사항이 제시되면 "GO"버튼을 누르고 주어진 순서대로 모든 지시 사항을 따르므로 차량을 주어진 위치로 보낼 수 있습니다. 따라서 차량에 지정된 지시 사항으로 이동하는 데 필요한 지시 사항을 삽입하도록 아이에게 지시 할 수 있습니다.
string
일련의 명령 으로 (입력 매개 변수) 를 처리 하고 차량이 정지하는 문자를 계산 하는 가장 짧은 프로그램 / 기능을 작성해야합니다 (출력 string
).
세부:
- 차량은 항상 하단의 빈 사각형에서 시작하여 북쪽을 향합니다 (
U
정사각형 쪽으로 ). - 입력 문자열은 문자 포함
F
,R
,L
과G
(이하 "이동"버튼을). 원하는 경우 매트와 지침에 소문자를 사용할 수 있습니다. - 알고리즘은 첫 번째 문자열 이전에 문자열의 모든 명령을 따라야합니다
G
(차량이 이동하기 시작한 이후의 모든 명령은 무시 됨). - 입력 문자열이 완전히 처리되지 않은 경우라도 차량이 매트에서 나오면 알고리즘은 문자열을 반환해야합니다
Out of mat
. - 그렇지 않은 경우 알고리즘은 차량이 정지 한 문자를 반환해야합니다. 시작점은
문자 (또는 빈 문자열) 로 계산됩니다 .
예 :
Input: FFG
Output: P
Input: FRFRFG
Output: Out of mat
Input: RRFFG
Output: Out of mat
Input: FFFRFFLFG
Output: X
Input: FFFRFFLF
Output: <-- Nothing or a whitespace (the robot has not started moving)
Input: FFFRRFFFG
Output: <-- Nothing or a whitespace (the robot has returned to the starting point)
Input: RRRRRLFFFLFFRFRFGFFRRGRFF
Output: L (Everything after the first G is ignored)
이것은 code-golf 이므로 각 언어마다 가장 짧은 프로그램이 이길 수 있습니다!
@
시작 위치와 공백이 매트에서 떨어져있는 문자열 입력과 같은 매트 구성 으로이 구성은ERLBIXN\nOAQYCTG\nFWHPDZS\n KVUMJ \n @
(다른 간격으로 SE가 엉망이 됨)