당신의 임무는 RoboZZle 통역사를 작성하는 것입니다. 게임에 익숙하지 않은 경우 robozzle.com 의 비디오를 보거나 아래 설명을 읽으십시오.
로봇은 빨간색, 녹색, 파란색 또는 검은 색의 사각형 사각형 격자에 있습니다. 검은 색 사각형에 액세스 할 수 없습니다. 다른 사람들은 접근 할 수 있고 그들 중 일부는 별을 포함합니다. 목표는 검은 사각형을 밟거나지도에서 떨어지지 않고 모든 별을 모으는 것입니다. 로봇은 하나의 사각형을 차지하고 왼쪽, 오른쪽, 위 또는 아래로 특정 방향을 향합니다. 서브 루틴 F1, F2, ..., F5로 그룹화 된 어셈블리와 같은 명령어를 따릅니다. 명령은 한 쌍의 술어 ( "없음", "적색 인 경우", "녹색 인 경우", "파란색 인 경우")와 조치 ( "앞으로 이동", "왼쪽으로 돌림", "오른쪽으로 돌리기", "현재 사각 빨간색 페인트", "녹색 페인트", "파란색 페인트", "아무것도하지 않음", "call F1", ..., "call F5"). 서브 루틴 호출은 스택을 사용하며 재귀적일 수 있습니다. 기존 프로그래밍과 마찬가지로 서브 루틴의 마지막 명령이 완료된 후 서브 루틴이 호출 된 지점부터 실행이 계속됩니다. 실행은 F1의 첫 번째 명령에서 시작하여 로봇이 별이있는 모든 사각형을 방문하거나 로봇이 검은 사각형 또는지도 외부에 닿을 때까지 또는 1000 개의 명령이 실행될 때 (조건 자 실패 및 "아무것도하지 않음"동작)까지 계속됩니다. 계산하지 않거나) 실행할 명령이 더 이상 없습니다 (스택 언더 플로).
입력 :
a
-지도를 인코딩하는 12x16 문자 매트릭스 (일반적으로 언어로 표시되는 문자열 배열)-'#'
액세스 할 수없는 (검은 색) 사각형,'*'
별이있는 사각형,'.'
나머지c
-액세스 가능한 사각형의 색상을 설명하는 12x16 문자 매트릭스-'R'
(빨간색),'G'
(녹색) 또는'B'
(파란색). 액세스 할 수없는 사각형은 3 개의 임의의 문자로 표시됩니다.y
그리고x
-로봇의 0 기반 행과 열;a[y][x]
~로 보장된다'.'
d
- 방향이 로봇이 직면 :0 1 2 3
권리, 아래로, 즉쪽으로, 위, 왼쪽(y,x+1)
,(y+1,x)
,(y,x-1)
,(y-1,x)
f
-단일 문자열, 연결된 F1 ... F5 구현. 각 구현은 술어 조치 쌍 (서브 루틴 당 최대 10 쌍)의 시퀀스 (비어있을 수 있음)'|'
입니다.술어 :
'_'
없음,'r'
빨강,'g'
초록,'b'
파랑행동 :
'F'
앞으로 이동,'L'
좌회전,'R'
우회전,'r'
빨간색'g'
페인트, 녹색'b'
페인트, 파란색 페인트,'1'
F1 호출, ...,'5'
F5 호출,'_'
아무것도하지 마십시오
위와 같이 입력 이름을 지정할 필요는 없지만 해당 값은 지정해야합니다.
출력 : 1
(또는 true
) 로봇이 규칙에 따라 모든 별을 수집하는 경우 0
( false
) 그렇지 않은 경우
예 :
a=["################","################","##*....*...*#.##","##.####.#####.##","##.####.#####.##","##.####*...*#.##","##.########.####","##*........*#.##","################","################","################","################"]
c=["RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRBBBBRGGGGRRRR","RRBRRRRGRRRRRRRR","RRBRRRRGRRRRRRRR","RRBRRRRRGGGBRRRR","RRBRRRRRRRRGRRRR","RRRBBBBGGGGBRBRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR"]
y=2; x=6; d=2
// and then depending on "f":
f="_FrLg2_1|_FbLrR_2||||" // result:1
f="_FrRg2_1|_FbLrR_2||||" // result:0 (stepped on a black square)
f="_FrLrL_1|_FbLrR_2||||" // result:0 (1000-step limit exceeded)
f="_FrLg2__|________||||" // result:0 (stack underflow)
"페인트"명령과 관련된 또 다른 예 :
a=["#***************","#*###*###*###*##","#*###*###*###*##","***#***#***#***#","***#***#***#***#","*###*###*###*###","***#***#***#***#","***#***#***#***#","***#***#***#***#","*###*###*###*###","*.*#***#***#***#","***#***#***#***#"]
c=["RGGGGGGGGGGGGGGG","RBRRRGRRRGRRRGRR","RBRRRGRRRGRRRGRR","RBRRGGGRGGGRGGGR","BRRRGGGRGGGRGGGR","BRRRGRRRGRRRGRRR","BRRRGGGRGGGRGGGR","RBRRGGGRGGGRGGGR","BRRRGGGRGGGRGGGR","BRRRGRRRGRRRGRRR","BGRRGGGRGGGRGGGR","RBRRGGGRGGGRGGGR"]
y=10; x=1; d=0
f="_2_R_R_1|_FgRgFgFg3rRr4b2_Fgb|_F_F_R|_2_L_r||"
// result:1
자체 테스트를 생성하려면 robozzle.com의 목록에서 퍼즐로 이동하여 문제를 해결하거나 시도하지 마십시오. 브라우저에서 F12를 누르고 JS 콘솔에 입력하십시오.
r=robozzle;s=JSON.stringify;with(r.level)console.log('a='+s(Items)+'\nc='+s(Colors)+'\ny='+RobotRow+'\nx='+RobotCol+'\nd='+RobotDir+'\nf='+s(r.encodeSolution()))
언어의 결과를 다시 포맷하십시오.
최단 승리. 허점이 없습니다.