당신은 두 도시 사이의 사막을 건너는 여행자입니다. 멈추지 않고 물을 충분히 운반 할 수 없습니다. 이것은 고전적인 퍼즐의 변형입니다.
규칙
사막은 다음과 같습니다 : 대부분 빈 공간의 WxH 그리드. 표시된 공간 S
은 시작 E
위치이고 종료하려는 위치이며 숫자 N으로 표시된 사각형에는 N 단위의 물이 들어갑니다. .
홀드 제로 워터가 표시된 사각형 .
.....................................
........S............................
.....................................
.........7...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
S는 5 단위의 물로 시작합니다.
최대 5 단위의 물을 운반 할 수 있습니다.
매번 당신을
- 한 칸을 위, 아래, 왼쪽 또는 오른쪽으로 움직입니다.
- 운반하는 물 1 단위를 소비하고
- 픽업 또는 드롭 물 단위의 일부 수입니다.
회전은 다음 (direction)(+|-)(units of water)
과 +
같이 표기됩니다 : , 물을 집어 들고 있음을 나타냅니다 -
.
예제 전환 :
D+0 Move Down
R+0 Move Right
D+2 Move Down, pick up two units of water.
U-1 Move Up, drop one unit of water.
위의 예에서 S부터 시작하여 이러한 이동을 수행하면 사막은 다음과 같습니다.
.....................................
........S............................
.........1...........................
.........5...........................
.....................................
.......................3.............
.....5...............................
................................2....
.....................................
.....................................
.....................................
...............................E.....
.....................................
....................7................
.....................................
.....................................
당신은 이미 광장에있는 것보다 더 이상 물을 집을 수 없습니다. 물을 주울 때 타일 수에서 해당 개수의 장치를 빼십시오.
최대 5 대를 수용 할 수있는 물만 집을 수 있습니다.
무한대 단위를 보유하는 S를 제외하고 타일은 9 개를 초과하여 보유 할 수 없습니다.
현재 보유하고있는 물만큼만 떨어 뜨릴 수 있습니다.
다시 집을 때까지 땅의 물은 변하지 않습니다.
S로 돌아 오면 물을 고갈시키지 않고 물을 어느 정도 나 집을 수 있습니다.
E에 도달 하면 이깁니다 . E에서 마지막 물을 소비해도 여전히 승리합니다.
자신의 차례가 끝난 후 물이없고 E가 없으면 죽습니다 .
입력과 출력
프로그램은 STDIN
위와 같은 형식으로 임의의 크기의 시작 맵을 ASCII 아트로받습니다. 직사각형이라고 가정합니다. 즉, 모든 줄의 길이가 같고 정확히 S
하나의 E
사각형이 있고 모든 줄이로 끝나고 \n
STDIN 전체가이 정규식을 따릅니다./^[SE1-9\.\n]+$/
프로그램은 다음 출력을 STDOUT에 씁니다.
- 움직임의 목록
- 지도의 최종 상태
이동 목록을 편리한 형식으로 출력 할 수 있습니다.
맵의 최종 상태는 입력 된 것과 동일한 형식으로 인쇄됩니다. 단#
, 타일에 물이없고 S 또는 E가 아닌 경우 방문한 모든 타일을로 표시 하여 사막 을 통과 한 경로를 추가로 표시합니다. 그것은이다 .
).
예 입력 :
.....S.
.......
.......
E......
....8..
예 우승 결과 :
D+0
D+0
D+0
D+0
L+5
L+0
L+0
L+0
L+0
U+0
.....S.
.....#.
.....#.
E....#.
####3#.
사소하지 않은
코드를 게시 할 때 코드가 다음과 같은 사소하지 않은 조건을 만족하는 솔루션을 찾는 샘플 맵 입력을 게시하십시오.
- S와 E는 10 번 이상 떨어져 있습니다.
- 처음에 N 단위의 물을 포함하는 모든 사각형은 모든 사각형이있는 N- 폭 경계로 둘러싸여 있어야합니다
.
(S 또는 E가 아닌 물 없음).
예
........2.
..........
..........
S.1..2....
..........
..........
........1.
..3.......
.........E
타일의 물의 양을 늘리면 위의 내용이 간단 해집니다.
요구 사항
아마도 프로그램은 해결책을 찾기 전에 여러 번 실패한 시도를하게 될 것입니다.
- 프로그램은 결국 모든 해결 가능한 입력을 해결해야합니다.
- 나는 당신이 죽는 것을 지켜보고 싶습니다 -당신의 프로그램은 해결책을 찾지 못한 모든 시도 에 대해 경로의 움직임과 최종 경로를 죽음으로 출력합니다 .
- 성공한 솔루션이 발견되면 전체 출력물을 인쇄하고 종료하십시오.
- 해결책을 찾을 때까지 실행하지만 동일한 해결책을 두 번 시도하지 마십시오. 모든 사망은 별도의 경로로 이루어져야합니다.
- 이것을 테스트 입력으로 사용하십시오.
(일부 중간 지점에서 워터 캐시를 삭제하려면 최소한 한 번의 이동이 필요합니다).
S........
.........
.........
........E
사소한 데모 입력으로 게시 된 가장 짧은 코드 가 승리합니다.