class program { define halfturn() { turnleft(); turnleft(); } define turnright() { iterate( 3 ) turnleft(); } define leftmove() { turnleft(); move(); } define rightmove() { turnright(); move(); } define backmove() { halfturn(); move(); } define llenaLinea() { while( notNextToABeeper ) { putbeeper(); move(); } } define caminaAPared() { while( frontIsClear ) move(); } define cierraCubiculo() { caminaAPared(); rightmove(); putbeeper(); backmove(); turnleft(); caminaAPared(); leftmove(); turnleft(); llenaLinea(); } define checaCubiculo() { while( notNextToABeeper && frontIsClear ) move(); if( nextToABeeper ) cierraCubiculo(); else { rightmove(); turnleft(); } } define inicializa() { caminaAPared(); backmove(); turnleft(); if( frontIsBlocked ) { leftmove(); if( nextToABeeper ) { backmove(); putbeeper(); } turnoff(); } leftmove(); turnright(); checaCubiculo(); } program() { inicializa(); while( frontIsClear ) { move(); leftmove(); turnright(); checaCubiculo(); } turnoff(); } }