class program { define halfturn() { turnleft(); turnleft(); } define turnright() { iterate(3) turnleft(); } define leftmove() { turnleft(); move(); } define backmove() { halfturn(); move(); } define rightmove() { turnright(); move(); } define duplica() { pickbeeper(); move(); putbeeper(); putbeeper(); backmove(); halfturn(); } define duplicaMonton() { if( nextToABeeper ) { duplica(); duplicaMonton(); putbeeper(); } } define colocaPotencias() { rightmove(); putbeeper(); turnleft(); while( anyBeepersInBeeperBag ) { duplicaMonton(); if( frontIsClear ) move(); } } define recogeBeepers() { rightmove(); while( nextToABeeper ) pickbeeper(); backmove(); turnright(); } define suma() { halfturn(); while( nextToABeeper && frontIsClear ) move(); if( notNextToABeeper ) backmove(); else halfturn(); leftmove(); turnright(); while( frontIsClear ) { if( nextToABeeper ) recogeBeepers(); move(); } if( nextToABeeper ) recogeBeepers(); } define finaliza() { turnleft(); while( frontIsClear ) move(); turnright(); while( frontIsClear ) move(); while( anyBeepersInBeeperBag ) putbeeper(); } program() { colocaPotencias(); suma(); finaliza(); turnoff(); } }