class program { define turnright() { iterate( 3 ) turnleft(); } define halfturn() { turnleft(); turnleft(); } define backmove() { halfturn(); move(); } define colocaPila() { turnright(); while( frontIsClear ) { move(); putbeeper(); } halfturn(); while( nextToABeeper ) move(); backmove(); turnleft(); } define colocaBeepers() { while( frontIsClear ) { move(); if( nextToABeeper ) colocaPila(); } } define caminaABeeper() { while( frontIsClear && notNextToABeeper ) move(); } define caminaAPared() { while( frontIsClear ) move(); } define traePila() { turnleft(); if( frontIsClear ) { move(); while(nextToABeeper) { pickbeeper(); backmove(); caminaABeeper(); putbeeper(); backmove(); caminaABeeper(); } backmove(); caminaABeeper(); turnleft(); } else turnright(); } define recogePilas() { while( frontIsClear ) { if( nextToABeeper ) traePila(); move(); } if( nextToABeeper ) traePila(); } define subeBeeper() { pickbeeper(); turnright(); move(); putbeeper(); backmove(); turnright(); } define subeBeepers() { while( frontIsClear ) { if( nextToABeeper ) subeBeeper(); move(); } } define buscaPozo() { caminaABeeper(); if( frontIsClear ) { move(); caminaABeeper(); if( nextToABeeper ) { caminaAPared(); halfturn(); subeBeepers(); halfturn(); buscaPozo(); } else { halfturn(); caminaABeeper(); turnoff(); } } else turnoff(); } program() { colocaBeepers(); halfturn(); recogePilas(); halfturn(); buscaPozo(); turnoff(); } }