배경
당신은 일차원 미로에서 길을 잃은 것을 발견하기 위해 깨어 있습니다! 신비로운 요정 (혹은 무엇인가)이 나타나고 출구가 당신 앞에 놓여 있다고 설명하지만, 출구와 출구 사이에는 일련의 도전이 있습니다. 당신이 앞으로 돌아 다니면서 당신은 모든 소위 도전 이 단지 잠겨진 문 이라는 것을 알고 있습니다. 먼저 티 모양의 열쇠 구멍이있는 문을보고, 그런 열쇠가없는 경우에는 걸음을 되찾아 T
모양이 있는 열쇠를 찾으십시오 .
좌절, 당신은 지상에 열쇠의 알파벳 수프를 발견하고, 어느 것도 당신이 겪은 문과 일치하지 않습니다. 천재 (또는 관용구)를 치기 때문에 소문자 t
모양의 키를 슬롯에 충분히 끼우면 슬롯에 맞출 수 있습니다. 소문자 t
키를 사용 하여 문에 접근하면 T
구멍이 녹색으로 빛나고 문이 앞쪽으로 녹습니다.
하나는 아래로, 더 많은 것은 갈 ...
도전
이 과제의 목표는 미로를 빠져 나가는 데 필요한 단계 수를 표시하는 것입니다.
이 과제의 입력은 미로입니다. 문자 만 포함하는 하나의 문자열 [A-Za-z^$ ]
입니다. 용어 사전:
^
-시작 공간. 입력은 정확히 하나를 포함합니다^
.$
-출구 (자유!). 입력은 정확히 하나를 포함합니다$
.[A-Z]
-대문자는 문을 나타냅니다. 필수 키를 이미 수집 한 경우에만이 문을 통과 할 수 있습니다.[a-z]
-소문자는 키를 나타냅니다. 키가있는 공간을 걸어서이 키를 수집합니다.
입력에 각 대문자 중 최대 하나가 있습니다. 이것은 총 문 수가 0-26 사이임을 의미합니다.
모든 잠긴 문 [A-Z]
에는 정확히 하나의 해당 소문자 키가 [a-z]
있습니다. 입력 에 공백 ( ) 이 얼마든지있을 수 있습니다 .
모든 문은 시작 오른쪽과 출구 왼쪽에 있습니다. 따라서 불필요한 문은 없을 것입니다. 모든 입력을 해결할 수 있습니다.
이 과제의 결과는 미로를 빠져 나가는 데 걸리는 단계의 수입니다.
연산
이 비참한 장소를 나가는 방법 론적 접근 방식은 다음과 같습니다.
- 처음부터 시작하고 (
^
) 앞으로 나가는 키를 모아 앞으로 이동합니다 (오른쪽). - 문을 가로 질러 올 때 올바른 키가 있으면 문으로 넘어갑니다. 올바른 키가없는 경우 열 수 없었던 가장 최근 도어의 키를 찾을 때까지 뒤로 오는 키를 수집합니다 (왼쪽).
- 현재 번거로운 도어의 키를 수집하면 오른쪽으로 돌아가 계속 진행합니다.
- 나갈 때까지이 과정을 반복하십시오 (
$
).
숙련 된 골퍼는이 알고리즘을 실행 한 것과 동일한 결과를 출력하는 한 코드에서이 특정 알고리즘을 구현할 필요가 없다는 것을 이해할 것입니다.
계산
한 정사각형에서 다른 정사각형으로 이동할 때마다 한 단계로 계산됩니다. 180º 회전해도 추가 단계가 발생하지 않습니다. 필수 키가 없으면 문으로 앞으로 나아갈 수 없습니다. 열쇠를 들어 올려야하며, 출구로 올라가서 승리해야합니다. 첫 번째 이동 후 시작 공간 ( ^
)은 다른 일반 공간처럼 작동합니다.
예
이 예에서는 공간을 사람이 읽을 수 있도록 밑줄로 남겨 두었습니다.
입력은 _a_^_A__$__
입니다. 출력은 11
입니다. 당신은 걸릴 1
당신이에 대한 키가 없다고 앞으로 단계, 통보 A
문을 다음 얼굴에 대해. 를 포함하는 공간을 차지할 때까지 뒤로 걷습니다 a
( 3
뒤로, 4
총계). 그런 다음 출구가있는 공간을 차지할 때까지 앞으로 걸어갑니다 ( 7
앞으로, 11
총계).
입력은 b__j^__a_AJB_$
입니다. 결과는 41
미로의 뒷면으로 두 번의 별도 트립을 수행하는 것입니다. 하나는 j
키를 얻고 다른 하나는 b
키 를 얻습니다 .
입력은 __m__t_^__x_T_MX_$____
입니다. 출력은 44
입니다. x
처음부터 끝까지 열쇠를 집어 들었을 때 열쇠 를 얻기 위해 추가 여행을하지 않습니다 T
.
입력은 g_t_^G_T$
입니다. 출력은 12
입니다. G
열쇠가 없으면 바로 얼굴을 향해 이동할 수 없습니다 . t
열쇠로가는 길에 열쇠 를 집어 들고 g
자유로가는 길에 두 문을 열면 운이 좋습니다 .
입력은 _^_____$
입니다. 출력은 6
입니다. 그것은 쉽다.
I / O 지침 및 당첨 기준
표준 I / O 규칙이 적용됩니다. 이것은 코드 골프 도전입니다.
A
에 bA^aB$
하나 불필요한 없을 것이다. ;)