iniciar-programa
define-prototipo-instruccion izq(n);
define-prototipo-instruccion der(n);
define-nueva-instruccion gira(n) como
inicio
   repetir n veces
      gira-izquierda;
fin;
define-nueva-instruccion acabaD como
inicio
   gira(2);
   avanza;
   gira(1);
   avanza;
   apagate;
fin;
define-nueva-instruccion izq(n) como
inicio
  si si-es-cero(n) entonces
  inicio
     si frente-libre entonces
     inicio
        avanza;
        gira(3);
        si frente-libre entonces
        inicio
           avanza;
           si no-junto-a-zumbador entonces
              acabaD;
           gira(2);
           avanza;
           gira(2);
        fin
        sino
        inicio
          gira(2);
          avanza;
          apagate;
        fin;
        gira(3);
        avanza;
        gira(2);
     fin
     sino
        apagate;
  fin
  sino
  inicio
     si frente-libre entonces
     inicio
        avanza;
        si izquierda-libre entonces
        inicio
           gira(1);
           avanza;
           coge-zumbador;
           si no-junto-a-zumbador entonces
           inicio
              deja-zumbador;
              gira(3);
              izq(n);
              gira(3);
           fin
           sino
           inicio
              deja-zumbador;
              gira(3);
              der(precede(n));
              izq(precede(n));
              gira(3);
           fin;
           avanza;
           gira(1);
        fin;
        gira(2);
        avanza;
        gira(2);
     fin;
  fin;
fin;
define-nueva-instruccion der(n) como
inicio
  si si-es-cero(n) entonces
  inicio
     si frente-libre entonces
     inicio
        avanza;
        gira(3);
        si frente-libre entonces
        inicio
           avanza;
           si no-junto-a-zumbador entonces
              acabaD;
           gira(2);
           avanza;
           gira(2);
        fin
        sino
        inicio
          gira(2);
          avanza;
          apagate;
        fin;
        gira(3);
        avanza;
        gira(2);
     fin
     sino
        apagate;
  fin
  sino
  inicio
     si frente-libre entonces
     inicio
        avanza;
        si derecha-libre entonces
        inicio
           gira(3);
           avanza;
           coge-zumbador;
           si no-junto-a-zumbador entonces
           inicio
              deja-zumbador;
              gira(1);
              der(n);

              gira(1);
           fin
           sino
           inicio
              deja-zumbador;
              gira(1);
              der(precede(n));
              izq(precede(n));
              gira(1);
           fin;
           avanza;
           gira(3);
        fin;
        gira(2);
        avanza;
        gira(2);
     fin;
  fin;
fin;
define-nueva-instruccion busca(n) como
inicio
    der(n);
    izq(n);
    busca(sucede(n));
fin;
inicia-ejecucion
    mientras no orientado-al-norte hacer
	   gira-izquierda;
    busca(0);
    apagate;
termina-ejecucion
finalizar-programa