일부 텍스트 기반 로그 라이크 (rogue-like)는 벽으로 걸어 들어 가지 못하게하고 시도하면 뒤로 물러납니다. 플레이어를 가장 가까운 방향으로 움직일 수있는 이유는 무엇입니까?
도전
방향과 3 x 3 문자 그리드가 주어지면 플레이어가 한 단계를 밟은 후에 동일한 그리드를 출력하는 함수 프로그램을 작성하십시오.
예를 들어
9
#..
.@#
#.#
된다
#.@
..#
#.#
입력
방향은 1에서 9까지의 단일 숫자로 제공되며 각 숫자는 8 개의 기본 방향에 해당하며 여전히 서 있습니다. 이것은 키패드의 숫자의 상대 위치에서 파생됩니다.
NW N NE .. \ | / ... 7 8 9 W-4 5 6 -E ... 12 3 ../ | \ SW S SE
그러나 789, 456, 123 대신 숫자 123, 456, 789를 사용할 수도 있습니다. 즉, 원하는 경우 맨 위와 맨 아래 2 개의 행 또는 숫자를 바꿀 수 있습니다. 이것들은 허용 가능한 유일한 인덱스 조합입니다.3 x 3 격자는 걸을 수있는 바닥, 벽 및 플레이어를 나타내는 3 개의 구별 가능한 인쇄 가능한 ASCII 문자로 구성됩니다. (테스트 사례에서는
.바닥에 사용되며#s는 벽이며@플레이어입니다.)- 프로그램에서 어떤 문자를 사용할지 선택할 수 있지만 답에 해당 문자를 명시해야하며 여러 번의 시험에서 일관되어야합니다.
- 문자를 나타내는 문자는 항상 3 x 3 격자의 중간에 있으며 방향은 항상 1과 9 사이입니다 (포함).
- 어떤 순서로든 입력 할 수 있습니다
- 3 x 3 격자는 문자 배열, 문자열 배열, 9 길이 문자열 또는 다른 적절한 대안으로 입력 될 수 있습니다.
산출
- 함수에서 반환하거나 StdOut 또는 가장 가까운 대안으로 출력
- 후행 공백과 개행이 허용됩니다
- 입력과 동일한 문자 표현을 사용해야합니다
- 입력에 허용 된 것과 동일한 형식이 출력에 허용됩니다
플레이어의 움직임
지정된 방향이 벽에 의해 차단 된 경우 (예 : 위의 예에 방향이 6 인 경우) 가장 가까운 두 방향을보십시오.
- 한 방향 (하나만)이 비어있는 경우 해당 방향으로 플레이어를 이동하십시오.
- 비어있는 방향이없는 경우 다음 가장 가까운 2 개의 방향을 확인하십시오 (방향 5 제외). 끝까지 감싸고 열린 방향을 찾지 못한 경우 (벽으로 둘러싸인 플레이어) 플레이어를 움직이지 마십시오.
- 두 방향이 모두 열려 있으면 무작위로 이동하려면 반드시 하나를 선택하십시오 (반드시 균일하지는 않지만).
주어진 방향이 5이면 플레이어를 움직이지 마십시오
테스트 사례
( #= 벽, .= 바닥, @= 플레이어)
입력: 9 # .. . @ # #. # 산출: #. @ .. # #. # 입력: 삼 # .. . @ # #. # 산출: # .. .. # # @ # 입력: 7 ##. # @ # .. # 산출: ## @ ##. #. # 또는 #. # .. # @. # 입력: 5 ... . @. ... 산출: ... . @. ... 입력: 2 ### # @ # ### 산출: ### # @ # ###
채점
이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
123;456;789대신 사용할 수 있습니까 789;456;123?

yuhjklbn않습니까? 삼가 고인의 명복을 빕니다.