class program { define half-turn() { turnleft(); turnleft(); } define turnright() { iterate(3) { turnleft(); } } define go-back() { half-turn(); move(); } define goto-start() { while (notFacingNorth) { turnleft(); } while (frontIsClear) { move(); } half-turn(); } define leave-beepers() { turnright(); move(); while (anyBeepersInBeeperBag) { putbeeper(); } go-back(); turnright(); } define put-in-position() { if (frontIsClear) { move(); put-in-position(); move(); } else { half-turn(); while (frontIsClear) { move(); } turnleft(); move(); turnleft(); } } define move-pile() { while (nextToABeeper) { pickbeeper(); } half-turn(); put-in-position(); while (anyBeepersInBeeperBag) { putbeeper(); } turnleft(); move(); } define invert() { goto-start(); while (notNextToABeeper && frontIsClear) { move(); } if (frontIsClear) { move-pile(); invert(); } else { move-pile(); } } define shift-pile() { go-back(); while (nextToABeeper) { pickbeeper(); } go-back(); while (anyBeepersInBeeperBag) { putbeeper(); } } define shift-column() { if (leftIsClear) { shift-pile(); turnleft(); move(); turnright(); shift-column(); } else { shift-pile(); } } program() { goto-start(); leave-beepers(); invert(); shift-column(); turnoff(); } }