class program { void turn(n) { iterate(n) turnleft(); } void recuerdaDireccion(n) { if(notFacingNorth) { turnleft(); recuerdaDireccion(n); turn(3); }else { divisible(n); while(notFacingNorth) turnleft(); } } void compara(n) { if (notNextToABeeper) { iterate(n) putbeeper(); } else { while(notFacingNorth) turnleft(); quita(n); if (facingNorth) { while(nextToABeeper) pickbeeper(); iterate(n) putbeeper(); } else { while(notFacingNorth) turnleft(); quita(n); } while(leftIsClear || rightIsClear || frontIsClear) turnleft(); } } void busca(n) { if (frontIsClear || rightIsClear || leftIsClear) { recuerdaDireccion(n); } else { compara(n); } } void quita(n) { iterate(n) { if (facingNorth) { if (nextToABeeper) pickbeeper(); else { turnleft(); putbeeper(); } } else { putbeeper(); } } } void divisible(n) { quita(n); if (notNextToABeeper) { iterate(4) { if (frontIsClear) { move(); busca(succ(n)); turn(2); move(); turn(2); } turnleft(); } while(notFacingNorth) turnleft(); }else { if (facingNorth) { divisible(n); } else { while(notFacingNorth) turnleft(); } } quita(n); } program() { iterate(4) { if (frontIsClear) { move(); busca(1); turn(2); move(); turn(2); } turnleft(); } turnoff(); } }