class program { define half-turn() { turnleft(); turnleft(); } define turnright() { iterate(3) { turnleft(); } } define goto-corner() { while (notFacingSouth) { turnleft(); } while (frontIsClear) { move(); } turnright(); while (frontIsClear) { move(); } } define goto-start() { goto-corner(); turnright(); move(); move(); turnright(); } define pick-and-set() { if (nextToABeeper) { pickbeeper(); pick-and-set(); move(); } else { goto-corner(); half-turn(); } } define count() { pick-and-set(); half-turn(); move(); putbeeper(); goto-start(); turnleft(); move(); while (anyBeepersInBeeperBag) { putbeeper(); } half-turn(); move(); turnleft(); } define next() { while (notNextToABeeper && frontIsClear) { move(); } if (nextToABeeper) { if (frontIsClear) { count(); next(); } else { count(); } } } program() { goto-start(); next(); goto-corner(); turnoff(); } }