class program { define halfturn() { turnleft(); turnleft(); } define turnright() { iterate( 3 ) turnleft(); } define backmove() { halfturn(); move(); } define leftmove() { turnleft(); move(); } define sigueCamino() { leftmove(); if( notNextToABeeper ) { backmove(); leftmove(); if( notNextToABeeper ) { backmove(); leftmove(); } } } define miraOeste() { while( notFacingWest ) turnleft(); } define caminaAPared() { while( frontIsClear ) move(); } define retornaMontones() { backmove(); while( anyBeepersInBeeperBag ) { putbeeper(); backmove(); putbeeper(); backmove(); } backmove(); } define finaliza() { miraOeste(); caminaAPared(); turnleft(); caminaAPared(); while( anyBeepersInBeeperBag ) putbeeper(); turnoff(); } define buscaInicio() { while( nextToABeeper ) { pickbeeper(); move(); if( nextToABeeper ) pickbeeper(); else { backmove(); putbeeper(); } backmove(); halfturn(); } move(); if( nextToABeeper ) retornaMontones(); else { retornaMontones(); sigueCamino(); backmove(); halfturn(); buscaInicio(); } } define recogeCircuito() { backmove(); while( nextToABeeper ) { pickbeeper(); sigueCamino(); } backmove(); while( anyBeepersInBeeperBag ) putbeeper(); while( nextToABeeper ) { pickbeeper(); sigueCamino(); } finaliza(); } program() { sigueCamino(); backmove(); halfturn(); buscaInicio(); recogeCircuito(); turnoff(); } }