줄거리 : 지미가 없습니다. 우리는 그를 찾아야합니다. 우리는 헤어져야합니다.
플롯 트위스트 : 지미는 이미 죽었습니다.
그러나 우리 캐스트는 그것을 알지 못하므로 어쨌든 전체 지역을 검색해야합니다. 셀의 N 열 x M 행 (1 <= M, N <= 256) 격자가 있으며, 시작점 "."에 대해 "S"로 표시됩니다. 열린 공간의 경우, 또는 장애물의 경우 "#"입니다. 이것은 지도 입니다.
0 <= p <= 26 costars , 0 <= q <= 26 extras , 1 star가 있습니다. 모든 사람은 처음에 S로 표시된 셀에 있습니다.
규칙
각 사람의 시력 반경은 다음과 같습니다.
...
.....
..@..
.....
...
별표는 "@", 대문자는 "A"로 시작하고, 엑스트라는 소문자로, "a"로 시작합니다. 처음에는 시작점을 둘러싼 시야 반경이 이미 검색된 것으로 표시되어 있습니다. 이것이 맵의 전체 열린 공간을 구성하면 게임이 종료됩니다. 각 순서는 다음 순서로 수행됩니다 .
- 각 사람은 동시에 왕을 움직이게합니다 (정지되어 있거나 8 개의 이웃 세포 중 하나로 이동).
- 각 사람 주위의 시력 반경에있는 모든 셀이 검색된 것으로 계산됩니다.
- costar가 다른 사람을 볼 수 없으면 그녀는 죽습니다. 엑스트라가 코스타, 스타 또는 적어도 2 개의 다른 엑스트라를 볼 수 없으면 그는 죽습니다. 이런 일들이 동시에 일어납니다. 즉, 한 차례에 사망에 대한 연쇄 반응은 없습니다. 위의 조건을 확인하고 죽을 사람은 한 번에 사망합니다.
- 지도의 모든 열린 공간을 검색 한 경우 검색이 끝난 것입니다.
노트
여러 사람이 언제라도 같은 광장에있을 수 있으며이 사람들은 서로를 볼 수 있습니다.
장애물은 시력을 방해하지 않으며 움직임 만 방해합니다. 사람들은 용암에 걸쳐 서로를 볼 수 있습니까?
지도의 열린 공간은 왕의 움직임으로 연결되어 있습니다.
초기 "S"는 장애물이 아니라 열린 공간으로 간주됩니다.
열린 공간에 상주하는 모든 왕의 움직임은 유효합니다. 예를 들어, 다음 이동은 합법적입니다.
.... ....
.@#. ---> ..#.
.#.. .#@.
.... ....
입력
입력 형식은
N M p q
[N cols x M rows grid with characters ".", "#", and "S"]
샘플 입력 :
6 5 0 0
......
......
..S...
......
......
과
9 9 1 1
S.......#
.......##
......##.
..#####..
...##....
...##....
...#.....
....#..#.
.........
p와 q는 각각 costar와 extra의 수입니다.
산출
출력은 매 턴마다 지시 된 방향으로 움직여야합니다.
789
456
123
이동 순서는 모두 동시에 제정되기 때문에 중요하지 않습니다. 사람의 움직임을 나열하지 않는 것은 괜찮으며 5 방향으로 이동하는 것과 같습니다. 움직임은 다음 형식으로 나열되어야합니다.
@9 A2 a2 B7.
"." 차례의 움직임의 끝을 나타냅니다.
맵을 검색 한 후, 최종 출력 라인은 공백으로 구분 된 3 개의 정수 여야합니다. 보드 검색을 완료하는 데 걸린 턴 수, 리빙 코스타 수 및 기타 엑스트라 수. 첫 번째 예제 입력
6 5 0 0
......
......
..S...
......
......
다음은 유효한 출력입니다.
@4.
@6.
@6.
@6.
4 0 0
마지막 참고 사항 : 별은 죽을 수 없으며지도의 열린 공간이 연결되어 있으므로 검색은 항상 성공합니다.
채점
귀하의 점수는 일련의 벤치 마크 테스트에서 취한 총 회전 수입니다 . 답변과 함께 자신의 테스트 케이스를 제출할 수 있습니다. 벤치 마크 세트에 대한 생활비의 합은 타이 브레이커로 사용되며, 여전히 동점이있는 경우, 생존 엑스트라 수의 합이 사용됩니다.
테스트 세트 및 컨트롤러
현재 5 개의지도가 https://github.com/Tudwell/HorrorMovieSearchParty/에 있습니다. 답변을 제출하는 사람은 누구나 테스트 케이스를 제출할 수 있으며, 어떤 이유로 든 거부 할 수있는 권리가 있습니다 (어떤 이유로지도를 거부하면 다른 것을 제출할 수 있음). 이것들은 내 재량에 따라 테스트 세트에 추가됩니다.
Python (2.7.5에서 테스트) 컨트롤러는 github에서 controller.py 로 제공됩니다 . 두 번째 컨트롤러 인 controller_disp.py 는 검색 중 그래픽 출력을 표시한다는 점을 제외하면 동일합니다 (Pygame 라이브러리 필요).
사용법 :
python controller.py <map file> <your execution line>
즉 :
python controller.py map1.txt python solver.py map1.txt
컨트롤러는 (프로그램의 stdin에 ) 형식 의 출력을 가지고 있습니다.
Turn 1
@:2,3 A:2,3 B:2,3.
##...##
#ooo..#
ooooo..
ooooo..
ooooo..
#ooo...
##.....
###....
----------------------------------------
이것은 모든 액터의 x.y 좌표 (왼쪽 상단 문자는 (0,0) 임)의 '.'- 종료 목록 인 턴 번호 (1 턴은 이동하기 전)이며 전체를 나타냅니다. 보드와 40 '-'s 라인. 그런 다음 양식 의 입력을 기다립니다 (프로그램의 표준 출력에서 )
@9 A2 B7.
이것은 위에서 지정한 출력 형식입니다. 컨트롤러는 검색된 열린 공간에 대해 'o'를 출력합니다. '.' 검색되지 않은 열린 공간, '#'에 장애물이 있습니다. 여기에는 사람과 좌표 목록에 살아있는 사람 만 포함되며 게임의 모든 규칙을 추적합니다. 잘못된 이동을 시도하면 컨트롤러가 종료됩니다. 주어진 턴에 대한 이동이 검색을 마치면 출력은 위와 같지 않습니다. 대신 그것은 형태입니다
Finished in 4 turns
4 1 0
여기에서 "4 1 0"은 총 4 번의 턴, 1 개의 살아있는 코스타 및 0 개의 여분의 여분을 나타냅니다. 컨트롤러를 사용할 필요는 없습니다. 자유롭게 사용하거나 직접 입력하십시오. 사용하기로 결정하고 문제가 발생하면 알려주십시오.
컨트롤러 작성에 도움을 주신 @githubphagocyte에게 감사드립니다.
편집 : 무작위 항목의 경우 특정 맵에서 실행 한 것을 해당 맵의 점수로 선택할 수 있습니다. 스코어링 요구 사항으로 인해 항상 가장 적은 턴을 선택한 다음 각 죽은 데드 코스트를 가장 적게 선택한 다음 각 맵에 대해 가장 적은 데드 엑스트라를 선택해야합니다.