프로기
시간 제한2초메모리 제한512 MB
일정한 간격으로 움직이는 차들이 있는 차선을 개구리가 위로 건너는 과정을 시뮬레이션하여, 안전하게 도착하는지 차에 치이는지 판정합니다.
문제
고전 게임 'Frogger'를 다시 만든다. 스프라이트, 음악, 애니메이션은 신경 쓰지 않아도 된다. 게임 아트팀이 맡는 부분이다.
각 레벨에는 여러 차선이 있는 도로가 있고, 자동차는 양방향으로 달린다. 같은 차선의 자동차는 일정한 간격으로 놓이며, 같은 속도로 같은 방향으로 움직인다. 차선의 방향은 번갈아 바뀌고, 가장 위 차선은 왼쪽에서 오른쪽으로 움직인다.
프로기는 가장 아래 차선 아래에서 출발해 도로를 아래에서 위로 건넌다. 매 시간 단계마다 프로기는 위, 아래, 왼쪽, 오른쪽 중 한 방향으로 한 칸씩 뛴다. 목표는 자동차에 치이지 않고 프로기를 도로 너머, 가장 위 차선 위로 보내는 것이다.
자동차 피하기
프로기가 움직이는 자동차의 경로에 들어가면 깔려 버린다. 그림 D.6은 연속된 두 시각에 걸친 자동차 한 대를 보여 준다. 시각 에 자동차가 가장 왼쪽 칸에 있고, 프로기는 이 차선에 없다고 하자. 시각 에 자동차가 속도 3으로 가장 오른쪽 칸까지 움직이고, 프로기가 이 차선으로 뛰어든다. 차선의 폭은 4칸이므로 안전한 칸은 자동차가 방금 있었던 가장 왼쪽 칸뿐이다. 나머지 세 칸으로 뛰면 자동차에 깔려 시뮬레이션이 끝난다.

그림 D.6: 연속된 두 시각에 걸친 자동차 한 대. 왼쪽에서 출발해 오른쪽으로 움직인다.
목표
도로 정보, 자동차의 위치와 속도, 프로기의 시작 위치와 이동 순서가 주어지면 시뮬레이션의 결과를 구한다. 결과는 두 가지다. 프로기가 가장 위 차선에서 무사히 나가거나, 자동차에 깔리거나 둘 중 하나다.
도로에 들어가기 전에 프로기는 왼쪽이나 오른쪽으로 움직여 경로를 미리 짤 수 있다. 일단 도로에 들어가면 위쪽으로만 나갈 수 있다. 프로기의 경로는 차선의 왼쪽, 오른쪽, 아래 경계를 벗어나지 않는다.
입력
각 입력은 시뮬레이션 한 번을 나타낸다. 첫 줄에는 공백으로 구분된 정수 과 가 있다. 은 차선의 수이고 (), 는 격자의 폭을 칸 수로 나타낸다 ().
이어서 위에서 아래 순서로 차선마다 한 줄씩 개의 줄이 나온다. 각 줄에는 정수 세 개가 있다. 는 첫 번째 자동차의 시작 오프셋, 는 자동차 사이의 간격, 는 자동차의 속도이다. 제약은 와 이다. 모든 오프셋은 해당 차선의 진행 방향을 기준으로 잰다.
마지막 줄은 정수 ()로 시작하고, 공백 뒤에 집합 {U, D, L, R}에서 고른 개 문자 ()의 문자열이 온다. 는 왼쪽에서부터 센 프로기의 시작 위치이고, 문자열은 프로기가 하는 이동(위, 아래, 왼쪽, 오른쪽)의 순서이다.
출력
프로기가 도로를 건너 가장 위 차선에서 나가면 "safe"를 출력한다. 자동차에 치이거나 도로 위에서 끝나지 않으면 "squish"를 출력한다.