Problem written by Eric Roberts
Handouts:
KarelReference
Day1: InvertBeepers.java
For a world of any size, with any configuration of beepers (no square will have more than one), invert all the beepers so that, where there was a beeper previously there is no beeper... and where there was no beeper previously, there is a beeper. Consider the following example.
/** * Program: Invert * --------------- * Invert all the beepers so that, where there was a beeper previously * there is no beeper... and where there was no beeper previously, there is a * beeper. */ public class InvertBeepers extends SuperKarel { public void run() { invertRow(); returnToWest(); while(leftIsClear()) { turnLeft(); move(); turnRight(); invertRow(); returnToWest(); } } /** * Method: Invert Row * ------------------ * Invert a single row. At the start, Karel should be facing east from * the west side of the row. After Karel should be facing east from the * east side of the same row, and all beepers in the row will be inverted. */ private void invertRow() { while(frontIsClear()) { invertBeeper(); move(); } invertBeeper(); } /** * Method: Invert Beeper * -------------------- * Inverts the beeper configuration on a square. If there was previously * a beeper, it is picked up. If there was previously no beeper, a beeper * is placed. */ private void invertBeeper() { if(beepersPresent()) { pickBeeper(); } else { putBeeper(); } } /** * Method: Return To West * ---------------------- * Turn around and go back to the wall that you came from! */ private void returnToWest() { turnAround(); while(frontIsClear()) { move(); } turnAround(); } }