class program { define turnRight() { iterate(3) turnleft(); } define halfTurn() { iterate(2) turnleft(); } define vistaAlSur() { while(notFacingSouth) turnleft(); } define moveRight() { turnRight(); move(); turnleft(); } define rellenaColumna() { putbeeper(); while(frontIsClear) { move(); putbeeper(); } halfTurn(); while(frontIsClear) move(); halfTurn(); } define rellena() { rellenaColumna(); while(rightIsClear) { moveRight(); rellenaColumna(); } } define buscaFondo() { while(nextToABeeper && frontIsClear) move(); if(notNextToABeeper) { halfTurn(); move(); halfTurn(); } turnleft(); while(nextToABeeper && frontIsClear) move(); if(notNextToABeeper) { halfTurn(); move(); halfTurn(); } vistaAlSur(); } define regresaAlOrigen() { vistaAlSur(); while(frontIsClear) move(); turnRight(); while(frontIsClear) move(); halfTurn(); } program() { rellena(); regresaAlOrigen(); buscaFondo(); pickbeeper(); while(notNextToABeeper && (frontIsClear || rightIsClear)) { regresaAlOrigen(); putbeeper(); buscaFondo(); pickbeeper(); } putbeeper(); turnoff(); } }