로그 라이크 길 찾기
당신의 임무는 지하 감옥을 나타내는 아래에 설명 된 요소의 2 차원 배열이 주어질 때 괴물을 깨우지 않고 도적이 수집 할 수있는 금 조각의 양을 나타내는 단일 숫자를 출력하거나 반환하는 것입니다.
배열의 요소는 다음과 같습니다.
- 빈 공간은
.
전화 또는 공백으로 표시됩니다 . - 도적의 시작 위치는 물론
@
; - 금 조각은로 표시됩니다
$
. - 벽은로 표시됩니다
#
. - 몬스터는 다음 정규 표현식의 문자로 표시됩니다
[a-zA-Z*&]
.
배열에는 위에 나열되지 않은 문자가 포함되어서는 안되므로 벽, 빈 공간, 불량 또는 금 조각이 아닌 것은 괴물이라고 가정 할 수 있습니다.
길 찾기 규칙은 다음과 같습니다.
- 도적은 빈 세포 나 금을 함유 한 세포 만 걸을 수 있습니다.
- 인접한 또는 대각선으로 인접한 셀로 이동하려면 회전이 필요합니다.
- 금을 줍는 것은 즉각이다.
- 도적은 깨어나지 않고 몬스터에게 한 차례 이상 인접하거나 대각선으로 인접 해있을 수 없으며 금지되어 있습니다.
- 도적은 몬스터의 인식 영역에 여러 번 들어올 수 있으며, 도적 이 근처 에서 2 번 연속 턴을 하면 몬스터가 깨어납니다 .
입력 및 출력 규칙
2 차원 배열, 평면 배열, 문자열 또는 기타 다른 것을 포함하여 합리적인 형식으로 입력을 얻을 수 있습니다. 삶을 더 편하게 만들면 어레이의 크기도 고려할 수 있습니다.
처음에는 도적이 괴물 근처에 있지 않을 것입니다.
전체 프로그램 또는 기능이 정상입니다.
채점
이것은 code-golf 이며 점수는 제출물의 바이트 수이며 더 적을수록 좋습니다.
테스트 사례
나는 가독성을 위해 빈 공간에 점을 사용합니다. 원한다면 공백을 사용할 수 있습니다 (위 참조). 또한 이것은 로그가 항상 왼쪽 상단에 있다는 순수한 우연의 일치입니다. 코드는 다른 유효한 위치도 처리해야합니다.
1)
@..
.$.
... -> 1
위생 검사입니다.
2)
@....
...g$
..... -> 0
다시 한번, 위생 테스트.
3)
@....
...$g
..... -> 1
도적은 왼쪽에서 움직여서 금을 붙잡을 수 있습니다.
4)
@....g..
.......$
........
.....h.. -> 1
도적은 몬스터들 사이에서 지그재그를 할 수 있으며, 각 몬스터 근처에서 한 턴 이상 머물지 않습니다.
5)
@....z..
.......$
.....b.. -> 0
이전 테스트 사례의 전술은 작동하지 않습니다. 몬스터 감도 영역이 겹칩니다.
6)
@$#.
###$
.... -> 1
위생 시험.
7)
@..#..
$.$g.$
...#.. -> 2
같게.
8)
@#.d#$
$...##
e.....
..$...
##..$b
.#..g$ -> 3
여기에있는 모든 금 중에서 세 개만 안전하게 도달 할 수 있습니다. 시작 위치 근처의 금은 하나 아래로 이동 한 다음 다시 시작 위치로 가져와 얻을 수 있습니다. 왼쪽 상단에서 벗어나려면 로그가 대각선 아래 오른쪽으로 두 번 움직여야합니다. 가운데 금은 도전이되지 않습니다. 지키고 외부 금 g
과은 b
다시 다음 중간 금의 오른쪽에있는 곳에서 대각선으로의 이동에 의해 가지고 할 수 있습니다. 나머지는 얻을 수 없습니다 : 오른쪽 상단 금은 벽에 의해 차단되며 오른쪽 하단 금은 몬스터 감도 영역에서 2 턴이 필요합니다.
다음 테스트 사례는 mbomb007에 의해 기부되었습니다.
9)
12345678
a @....g.D
b .......$
c ......#.
d .....h.. -> 1
이것은 까다 롭습니다. 경로는 b4-b5-c6-b7-c8-b8(grab)
입니다.
10)
12345678
a @....g.D
b .......$
c .......#
d .....h.. -> 1
경로는 [bc]4-c5-b6-c7-b8(grab)
입니다.
11)
12345678
a @....g.D
b ......#$
c .......#
d .....h.. -> 1
여분의 벽은 실제로 아무것도 변경하지 않으며 [bc]4-c5-b6-c7-b8(grab)
여전히 해결책입니다.
@
은 유효한 입력입니까?