iniciar-programa
define-nueva-instruccion gira (e) como inicio
repetir e veces gira-izquierda;
fin;


define-nueva-instruccion ubica_norte como inicio
 mientras frente-bloqueado hacer gira-izquierda;
 avanza;
 si derecha-libre y izquierda-libre entonces inicio
 gira (2);
 avanza;
 gira (3);
 fin;


  mientras frente-libre hacer avanza;
   si frente-bloqueado y derecha-bloqueada entonces inicio
    gira (2);
    mientras no-junto-a-zumbador hacer avanza;
    gira (2);
    fin
    sino inicio
    gira (2);
   mientras no-junto-a-zumbador hacer avanza;
  fin;
fin;


                                    (*esquinas!!!!!!!*)
define-nueva-instruccion abajo como inicio
 mientras derecha-bloqueada hacer inicio

   mientras derecha-bloqueada y frente-libre hacer inicio
   si no-junto-a-zumbador entonces deja-zumbador;
    avanza;
    fin;
    si frente-bloqueado entonces inicio
    gira (3);
    deja-zumbador;
   avanza;
   fin;
 fin;
 gira (3);
  mientras frente-libre y no-junto-a-zumbador hacer inicio
   si no-junto-a-zumbador entonces deja-zumbador;
    avanza;
   fin;
  gira-izquierda;
fin;



define-nueva-instruccion arriba como inicio
 mientras izquierda-bloqueada hacer inicio
   mientras izquierda-bloqueada y frente-libre hacer inicio
   si no-junto-a-zumbador entonces deja-zumbador;
    avanza;
    fin;
    si frente-bloqueado entonces inicio
    gira-izquierda;
    deja-zumbador;
   avanza;
   fin;
 fin;
 gira-izquierda;
  mientras frente-libre y no-junto-a-zumbador hacer inicio
   si no-junto-a-zumbador entonces deja-zumbador;
    avanza;
   fin;
  gira (3);
fin;



define-nueva-instruccion vuelve como inicio
 mientras no-junto-a-zumbador hacer inicio
  mientras frente-libre y no-junto-a-zumbador hacer avanza;
  si frente-bloqueado entonces gira-izquierda;
 fin;
fin;



define-nueva-instruccion compara (k) como inicio
 si junto-a-zumbador y no si-es-cero (k) entonces inicio
  coge-zumbador;
   compara (precede(k));
    fin
     sino inicio
     si si-es-cero (k) y junto-a-zumbador entonces inicio
      mientras no-orientado-al-sur hacer gira-izquierda;
      fin
     sino inicio
    mientras no-orientado-al-norte hacer gira-izquierda;
   fin;

 fin;
fin;




define-nueva-instruccion sur (k) como inicio
 si derecha-bloqueada o junto-a-zumbador entonces inicio
  si frente-libre entonces avanza;
   si frente-libre entonces inicio
    sur (sucede(k));

     fin
      sino inicio
       gira (3);
       avanza;
       sur (sucede(sucede(k)));
       fin;

       fin
       sino inicio
       vuelve;
       coge-zumbador;
       compara (k);



 fin;
fin;



define-nueva-instruccion norte (n) como inicio
 si izquierda-bloqueada o junto-a-zumbador entonces inicio
  si frente-libre entonces avanza;
   si frente-libre entonces inicio
    norte (sucede(n));
     fin
      sino inicio
      gira-izquierda;
      avanza;
      norte (sucede(sucede(n)));
      fin;

      fin
      sino inicio
      vuelve;
    repetir n veces deja-zumbador;
 fin;
fin;



    inicia-ejecucion

    mientras no-junto-a-zumbador hacer inicio
     deja-zumbador;
      ubica_norte;
       norte (0);
        gira (2);
         si frente-bloqueado entonces gira (3);
         sur (0);
         deja-zumbador;
         si orientado-al-norte entonces inicio
         ubica_norte;

         mientras junto-a-zumbador hacer coge-zumbador;
         deja-zumbador;
         si izquierda-libre entonces avanza;
         arriba;
         fin
         sino inicio
         ubica_norte;
         gira (2);
         si frente-bloqueado entonces gira (3);

         mientras junto-a-zumbador hacer coge-zumbador;
         deja-zumbador;
         si derecha-libre entonces avanza;
         abajo;
        fin;



    fin;




        apagate;
    termina-ejecucion
finalizar-programa
