class program { define halfturn() { turnleft(); turnleft(); } define turnright() { iterate( 3 ) turnleft(); } define backmove() { halfturn(); move(); } define leftmove() { turnleft(); move(); } define rightmove() { turnright(); move(); } define avanzaBeeper() { pickbeeper(); move(); putbeeper(); backmove(); halfturn(); } define caminaAPared() { while( frontIsClear ) move(); } define subeBeepers() { while( nextToABeeper ) { avanzaBeeper(); rightmove(); turnleft(); } turnleft(); caminaAPared(); } define llevaMonton() { while( nextToABeeper ) avanzaBeeper(); } define contraeMontones() { while( nextToABeeper ) { rightmove(); turnright(); while( facingWest ) { if( nextToABeeper && frontIsClear ) { move(); if( notNextToABeeper ) { backmove(); halfturn(); llevaMonton(); move(); } else { backmove(); leftmove(); rightmove(); } } else { rightmove(); rightmove(); } } } } define ordena() { while( nextToABeeper ) { subeBeepers(); rightmove(); turnright(); contraeMontones(); rightmove(); turnright(); caminaAPared(); turnright(); } } define bajaMontones() { move(); turnright(); while( nextToABeeper ) { turnright(); llevaMonton(); turnleft(); move(); } } program() { ordena(); bajaMontones(); turnoff(); } }