밥은 납치되어 미로에 갇혔다. 당신의 임무는 그가 탈출구를 찾도록 돕는 것입니다. 그러나 그것은 매우 어둡고 무서운 미로이기 때문에 아무것도 볼 수 없습니다. 그는 벽에 닿을 때만 벽을 느끼고 출구를 찾았을 때를 알고 있지만 더 이상 아무것도 모른다.
그는 메모리로 프로그램을 실행해야하므로 가능한 짧아야합니다.
참고 :이 문제는 http://acmgnyr.org/year2016/problems.shtml 에서 가져 왔지만 약간 조정하여 판사 프로그램 / 테스트 사례를 직접 작성했습니다.
사양
- 이것은 대화식 문제이므로 프로그램은 stdout으로 이동을 출력하고 stdin에서 응답을받습니다.
- 움직임의 귀하의 프로그램 출력 할 수 하나
right
,left
,down
,up
. - 그런 다음 다음 중 하나를 입력으로받습니다.
wall
-이것은 밥이 벽에 부딪쳤다는 것을 의미합니다. 밥은 같은 곳에 머무를 것입니다.solved
-밥이 출구를 찾았습니다! 이제 다른 것을 인쇄하지 않고 프로그램을 종료해야합니다.ok
-밥은 주어진 방향으로 움직일 수있었습니다.
- 미로에 출구가 없으면 프로그램은
no exit
Bob에게 포기해야한다는 사실을 알리기 위해 출력 해야합니다. 그러면 다른 것을 인쇄하지 않고 프로그램을 종료해야합니다. - Bob은 빨리 나가기 때문에 프로그램에서 불필요한 움직임을 일으키지 않아야합니다. 다시 말해, 프로그램은 같은 사각형에서 같은 방향으로 두 번 이동할 수 없습니다 .
- 이것은 code-golf 이므로 가장 짧은 프로그램이 승리합니다!
예
다음 예 S
에서 시작 사각형, X
출구, #
벽 및 공백은 유효한 사각형입니다. 정답은 하나도 없으므로 솔루션의 예제 실행 일뿐입니다. 또한 미로의 그림은 당신이 볼 수있는 곳이며 프로그램은 입력으로 얻지 못합니다.
########
#S #
###### #
# #
#X#
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
solved
#####
# S #
#####
right
ok
right
wall
down
wall
up
wall
left
ok
down
wall
up
wall
left
ok
down
wall
up
wall
left
wall
right
ok
no exit
solved
###############################
#S #
############## ### #
# #X# #
# #
##################
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
wall
down
ok
left
wall
down
ok
left
ok
down
wall
up
wall
left
ok
down
wall
up
solved
체커 프로그램
- 파이썬으로 솔루션 검사기를 작성했습니다. https://gist.github.com/Maltysen/f0186019b3aa3812d812f8bb984fee19 에서 찾을 수 있습니다 .
- 처럼 실행하십시오
python mazechecker.py ./mazesolver
. - 라는 폴더의 모든 미로에서 프로그램을 테스트합니다
mazes
. - 미로는 위와 동일한 형식으로 별도의 파일에 있습니다.
- 위에 나열된 모든 조건을 확인하고 솔루션 위반 여부를 알려줍니다.
- 로 추가 진단 정보를 인쇄 할 수 있습니다
python mazechecker.py -d ./mazesolver
. - 압축
mazes
폴더는 여기에서 찾을 수 있습니다 . 원하는 경우 자신 만의 것을 추가 할 수도 있습니다.
1
문제가 CC-BY-NA-SA 라이센스로 릴리스되었다고 명시 적으로 언급 할 가치가 있으므로 리믹스가 반드시 동일한 라이센스하에 있습니다.
—
Nick Kennedy
solved
출력 할 때을 얻 no exit
습니까? 그렇다면 테스트 사례뿐만 아니라 규칙에도 명시하십시오!
" 프로그램이 두 번 같은 광장에서 같은 방향으로 이동 할 수 없습니다. "이에 대해 두 가지 질문 : 나는 위치에있어 1하자 말
—
Kevin Cruijssen
x,y
과 가고 up
응답으로, wall
다음, right
다시 응답과를 wall
, 그때하려고 할 수 있습니다 up
다시, 또는 전용 left
과 down
나는 아직이 광장에서 이동하지 않았기 때문에 계속 사용할 수?
2. 이 미로 가 있다고 가정 해 봅시다 . 이 흐름으로 : 오른쪽 (확인); 오른쪽 (ok); 오른쪽 (벽); 위로 (ok) ; 위로 (ok); 위로 (벽); 왼쪽 (벽); 아래로 (ok); 아래로 (ok); 아래로 (ok); 아래로 (ok); 아래로 (벽); 오른쪽 (벽); 위로 (ok); 위로 (ok); 나는 이미 그 특정 광장에서 (대담한 광장에서) 이미 했어도 다시 올라갈 수 있습니까?
—
Kevin Cruijssen
@KevinCruijssen 나는 내 대답에서 어디서 왔는지 명시 적으로 추적하지 않습니다. 대신 각 사각형에서 처리 된 모든 방향을 추적하고 방문하지 않은 사각형을 먼저 시도합니다. 방문하지 않은 모든 정사각형을 시험해 보았을 때 남은 법적 조치는 내가 온 곳입니다 (이미 방문했지만이 방향은 아님).
—
Arnauld