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.

Solution

/**
 * 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();
    }
}
X