Time Limit: Java: 2000 ms / Others: 2000 ms
Memory Limit: Java: 65536 KB / Others: 65536 KB
"No it isn't," his brother Ferret replied, "and I can prove it." Ferret pulled his PlaySkool PDA from the back pocket of his Levi's Huggies.
"First, picture the level as a rectangular grid." Ferret punched a few of the buttons on his PDA and a rectangle appeared as he described. "Your character, a Lemming holding an umbrella, starts at the top of this rectangle. His goal is to reach the bottom without dying."
"I know that, you weasel, but what about the laser guns?" Garret whined.
"The name is Ferret, and I was just getting to that. If we represent the level as a rectangular grid, then the Lemming can occupy one square and each laser gun can occupy a square. Remember the laser guns are cyclic: they all shoot up the first turn, right the second turn, down the third turn, left the fourth turn, and then repeat the sequence."
"But you're forgetting the pits of lava!" Garret exclaimed.
"You didn't let me finish. Each pit of lava also occupies a square. And each plot of grass, the Lemming's destination, can also occupy a square. Then, it's just a matter of manipulating the Lemming and laser beams in a series of turns to determine if it is possible for the Lemming to reach the bottom without 'dying'."
"You think you're so smart, Ferret, let's see if you can explain that again in a clear, concise way."
The level will consist of a grid of squares. The way each laser beam and the Lemming moves can be described in "turns". To determine if the Lemming can reach the bottom of the level without dying, Ferret devised some rules:
Each turn will consist of two steps:
First, the laser guns will "fire" and maintain until the end of the turn, a beam in a direction dependent on the number of the turn. On the first turn, each laser gun will shoot up (all squares directly above a laser gun are "unsafe" and cannot be occupied by the Lemming); on the second turn, each laser gun will shoot right; on the third turn, each laser gun will shoot down; on the fourth turn, each laser gun will shoot left; on the fifth turn, the sequence will repeat.
Column 01234 R 0| L |
Second, the Lemming will always move one row down, but to any one of three
columns: one column to the left, one column to the right, or remain in the same
column. In the above example, on the first turn the Lemming (L) could move to
square (1,1), (2,1), or (3,1) (if he moved to (3,1), though, he would die because
of the laser beam). However, on any turn the Lemming cannot move outside of
the grid (i.e., he cannot move to column -1, or to a column number equal to
the number of columns).
The level is considered "possible" if the Lemming can reach any "grass" square without dying after a series of turns.
The Lemming will die if at any point he occupies the same square as a laser gun, its beam, or a pit of lava. This includes:
The Lemming moving into a square a pit of lava occupies,
The Lemming moving into a square a laser gun occupies,
The Lemming moving into a square a laser beam occupies (even if it is a grass square!),
A laser gun firing a beam into a square the Lemming occupies
Start line - A single line, "START x y", where 0 < x < 10
and x is the number of columns in the grid representing the level and 1 <
y < 10 and y is the number of rows in the grid representing the level.
The next y lines will represent the rows of the level, starting with row 0 (the top). Each line will consist of x letters. The letters will represent components of the level as follows:
L - Lemming (there will only be one 'L' per data set, and it will always be in row 0)
S - laser gun (these squares will never be in the final row)
P - pit of lava (these squares will always be in the final row)
G - grass (these squares will also always be in the final row)
O - "empty" square of air
End line -- A single line, "END".
Following the final data set will be a single line, "ENDOFINPUT".
"FERRET" will appear if the Lemming can make it safely (without dying) to any grass square at the bottom of the level after a series of turns.
"GARRET" will be output for a data set if it fails to meet the criteria for a "FERRET" line.
START 5 7 OOLOO OOOOO OOOSO OOOOO OOOOO OOOOO GPPGG END START 3 3 OLO OSO GGG END START 5 8 LOOOS OOOOO OOOOO OOOOO OOOOO OOOOO OOOOO PPPPG END ENDOFINPUT