게임
우리 대부분은 80 년대 아케이드 게임 인 Frogger 에 대해 알고 있습니다.이 게임의 목표는 바쁜 고속도로와 위험이 가득한 연못을 안전하게 개구리를 뛰어 넘어 집에 안전하게 도착하는 것입니다.
도전이 발행 프로 거 클론을 개발하기 위해 몇 달 전에. 그러나 Frogger를 재생할 수 있는데 왜 Frogger를 복제 해야 합니까? :)
다음과 같은 단순화 된 재생 그리드를 고려하십시오.
XXXXXXXXXXXXXXXXXXXXXXX North Safe Zone
-----------------------
| | <<<< Express Lane West (Lane 1)
| | > Gridlock East (Lane 2)
| | << Freeflowing Traffic West (Lane 3)
| | < Gridlock West (Lane 4)
| | >>>> Express Lane East (Lane 5)
-----------------------
XXXXXXXXXXX@XXXXXXXXXXX South Safe Zone
\__________ __________/
'
23 cells horizontally
우리는 각각 23 개의 셀 폭과 5 개의 레인을 가지고 있으며 2 개의 안전 지대 (개구리가 좌우로 안전하게 이동할 수있는 곳)와 23 개의 셀 폭을 가지고 있습니다. 그림의 명확성을 위해 오른쪽과 왼쪽 테두리를 무시해도됩니다.
우리의 개구리 @
는 위 그림에 표시된 것처럼 중앙 안전 구역의 중앙 (12 번째) 칸 에서 시작합니다.
게임의 시간은 프레임이라는 개별 단계로 나뉩니다. Froggy는 빠른 개구리이며 프레임 당 한 방향으로 (위, 아래, 오른쪽, 왼쪽) 하나의 셀을 홉핑 할 수 있습니다. 그는 또한 어떤 프레임에서도 정지 상태를 유지하도록 선택할 수 있습니다. 5 개 차선의 교통량은 다음과 같이 일정한 속도로 이동합니다.
- 급행 차선 서쪽 (1 차선)의 교통량은 매 프레임마다 2 개의 셀을 왼쪽으로 이동합니다.
- Gridlock East Lane (레인 2)의 트래픽은 매 2 초마다 1 셀씩 이동합니다.
- 프리 플로우 트래픽 서쪽 차선 (레인 3)의 트래픽은 매 프레임마다 1 셀씩 이동합니다.
- gridlock 서쪽 차선 (레인 4)의 트래픽은 매 2 프레임마다 1 셀씩 이동합니다.
- 고속 차선 이스트 (5 차선)의 트래픽은 매 프레임마다 2 개의 셀을 오른쪽으로 이동합니다.
트래픽 자체는 대략적으로 이 텍스트 파일 에서 3,000 개의 타임 스텝 . '교통'은 차량과 차량 사이의 공간으로 구성됩니다. 공백이 아닌 문자는 차량의 일부입니다. 텍스트 파일에는 5 개의 트래픽 레인 (동일한 순서)에 해당하는 5 개의 라인이 있습니다.
서쪽 차선의 경우, 프레임 0의 시작 (게임 시작)에서 차선의 첫 번째 차량이 경기장의 오른쪽 가장자리를 넘어서는 것으로 간주합니다.
동쪽으로가는 차선의 경우, 차량 이 줄 끝 에서 시작하는 것처럼 보이기 때문에 교통 줄은 "뒤로"고려되어야 합니다. 프레임 0의 시작에서, 우리는이 차선의 첫 번째 차량이 경기장의 왼쪽 가장자리 바로 위에 있다고 생각합니다.
예를 들면 다음과 같습니다.
Traffic Lane 1: [|==| =
Traffic Lane 2: |) = o
Traffic Lane 3: (|[]-[]:
Traffic Lane 4: <| (oo|
Traffic Lane 5: |==|] :=)
그러면 재생 그리드가 다음과 같이 나타납니다.
Start of Frame 0 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 1 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 2 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
Start of Frame 3 XXXXXXXXXXXXXXXXXXXXXXX
[|==| =
|) = o
(|[]-[]:
<| (oo|
|==|] :=)
XXXXXXXXXXXXXXXXXXXXXXX
레인의 모든 트래픽이 "고갈"된 후 (즉, 문자열이 소진 된 후) 문자열의 모든 문자를 공백으로 간주합니다.
다음 중 하나가 발생하면 개구리가 죽습니다 .
- 개구리는 어떤 프레임에서든 차량이 차지하는 세포를 점유합니다.
- 개구리는 급행 차선에서 정지 상태를 유지하고 1 셀 폭의 차량이 그 프레임에서 그를지나갑니다.
- 개구리는 서쪽으로 향하는 차량을 통해 동쪽으로 점프하거나 동쪽으로 향하는 차량을 통해 서쪽으로 점프합니다
- 개구리는 어떤 프레임에서든 7 (선) 바깥쪽으로 23 (셀) 플레잉 그리드를 뛰어 넘습니다.
이것은 개구리가 뭉개지 는 유일한 조건입니다. 특히, "with"트래픽을 따라 호핑하는 개구리는 동일 프레임에서 폭 1 차량에 의해 지나가는 급행 차선에서 셀 내외로 점프하는 개구리와 같이 허용된다.
목표와 채점
프로그래밍 챌린지의 목표는 마지막 차량이 플레잉 그리드를 빠져 나가기 전에 가능한 한 길을 건너 개구리를 길들이는 것입니다 . 즉, 프로그램은 프레임 X 의 완료 직후에 종료되며 , 여기서 프레임 X 는 그리드가 더 이상 차량이없는 상태가되는 첫 번째 프레임입니다.
프로그램의 출력은 다음 인코딩을 사용하여 개구리의 이동 순서를 포함하는 문자열 (또는 텍스트 파일)이어야합니다.
< frog moves left
> frog moves right
^ frog moves up
v frog moves down
. frog remains stationary
예를 들어, 문자열 <<^.^
은 개구리가 왼쪽으로 두 번 움직 인 다음 위로 움직 인 다음 한 프레임 동안 일시 정지 한 다음 다시 위로 움직인다는 것을 나타냅니다.
개구리가 남쪽 안전 지대에서 북쪽 안전 지대로 교차 할 때마다 1 점을 획득하고 개구리가 북쪽 안전 지대에서 남쪽 안전 지대로 교차 할 때마다 1 점을 얻습니다.
몇 가지 중요한 규칙 :
- 개구리는 찌그러져서는 안됩니다.
- 프로그램 코드와 함께 솔루션 (이동 순서)을 인라인 또는 텍스트 파일 (예 : pastebin.com 사용)로 게시하십시오.
- 우리의 개구리는 예쁘고 인식이 뛰어나므로 프로그램은 솔루션을 찾는 동안 모든 프레임의 모든 트래픽 데이터 를 사용할 수 있습니다. 여기에는 아직 재생 그리드에 도달하지 않은 트래픽에 대한 데이터가 포함됩니다.
- 그리드가 줄 바꿈되지 않습니다. 그리드를 종료하면 개구리가 뭉개져 허용되지 않습니다.
- 어느 시점에서도 트래픽이 "재설정"되거나 개구리가 "텔레포트"로 설정되지 않습니다. 시뮬레이션은 연속적입니다.
- 개구리는 탈출 한 후 남쪽의 안전 지대로 돌아올 수 있지만 이것은 한 지점으로 계산되지 않습니다. 북쪽 안전 지대도 마찬가지입니다.
- 컨테스트 당첨자는 가장 많은 건널목을 생성하는 이동 시퀀스를 생성하는 프로그램입니다.
- 추가 질문이나 문제가 있으면 의견 섹션에 자유롭게 문의하십시오.
추가 인센티브를 위해, 나는 그렇게 할 수있을 때 우승 프로그램 에 +100 의 현상금을 추가 할 것입니다.
보너스
개구리가 터치하는 그리드의 구석 구석마다 기본 점수 + 2.5 % * (최대 + 10 %). 그리드의 네 모서리는 두 안전 구역의 가장 왼쪽과 오른쪽 셀입니다.
이동 순서가 개구리를 전체 시뮬레이션을 위해 시작 셀의 왼쪽 또는 오른쪽 +/- 4 개 셀에 갇힌 상태로 유지하는 경우 기본 점수에 +25 % * (물론 세로로 자유롭게 움직일 수 있음).
점수 보너스는 없지만 OP의 특수 소품은 빠른 솔루션 검사기를 게시 한 사람에게 전달되므로 프로그래밍 할 필요가 없습니다. ;) 검증 인은 단순히 일련의 움직임을 받아들이고, 규칙과 교통 파일에 따라 적법성을 보장하며, 점수 (예 : 총 건널목 수)를보고합니다.
* 총 점수는 기본 점수에 보너스를 더한 값과 같으며 가장 가까운 정수로 내림합니다.