iniciar-programa
define-nueva-instruccion media-vuelta como repetir 2 veces gira-izquierda;
define-nueva-instruccion gira-derecha como repetir 3 veces gira-izquierda;
define-prototipo-instruccion busca(N);

define-nueva-instruccion mide(n) como inicio
 si frente-libre y no junto-a-zumbador entonces inicio
  avanza;
  mide(sucede(n));
 fin
 sino inicio
 si junto-a-zumbador entonces inicio
  media-vuelta; avanza; deja-zumbador;
  mientras izquierda-bloqueada hacer inicio
  avanza; deja-zumbador;
  fin;
  media-vuelta;
 fin
 sino
 si no junto-a-zumbador entonces inicio
  media-vuelta;
  repetir n veces avanza;
  mientras no junto-a-zumbador y frente-libre hacer avanza;
  media-vuelta;
  mientras derecha-bloqueada hacer inicio
  avanza; deja-zumbador;
  fin;
 fin;
 fin;
 fin;



define-nueva-instruccion sube(n) como inicio
 si derecha-bloqueada y frente-libre entonces inicio
  si no junto-a-zumbador entonces deja-zumbador;
  avanza;
  sube(sucede(n));
  fin
  sino inicio
   gira-derecha;
   si no junto-a-zumbador entonces deja-zumbador; avanza;
    busca(0);
  fin;

si orientado-al-este entonces inicio
    media-vuelta; avanza;
    gira-derecha; avanza; sube(n);
   fin;

fin;



define-nueva-instruccion baja(n) como inicio
 si frente-libre y izquierda-bloqueada entonces inicio
 si no junto-a-zumbador entonces deja-zumbador;
  avanza;
  baja(sucede(n));
 fin sino
 inicio
  gira-izquierdA;
  si no junto-a-zumbador entonces deja-zumbador;

    si frente-libre entonces
    inicio
      avanza;
       si frente-libre entonces inicio
        avanza;



         si frente-libre entonces inicio
          avanza;


           si frente-libre y izquierda-bloqueada entonces inicio
           media-vuelta; avanza; avanza;  avanza;
           gira-derecha;
            repetir n veces inicio
            si junto-a-zumbador entonces coge-zumbador; avanza;
            fin;
            sube(0);
           fin
            sino
            si izquierda-libre entonces inicio
             media-vuelta;  avanza;
             avanza; media-vuelta;
              busca(0);
            fin;

         fin
          sino inicio
           media-vuelta; avanza; media-vuelta; busca(0);
         fin;
         fin
         sino inicio
            busca(0);
         fin;
        fin;

        si frente-bloqueado y junto-a-zumbador entonces inicio
     gira-izquierda;
     repetir n  veces inicio
      si junto-a-zumbador entonces coge-zumbador; avanza;
     fin;
     sube(0);
    fin;
    si orientado-al-este entonces inicio
    media-vuelta; avanza;
    gira-izquierda; avanza; baja(n);
   fin;
 fin;
 fin;

define-nueva-instruccion encuentra(n) como inicio
 mientras no orientado-al-sur hacer gira-izquierda;
 deja-zumbador;
 baja(n);
 (*media-vuelta;
 mientras derecha-libre y frente-libre hacer avanza;
 si no junto-a-zumbador entonces inicio
 mientras derecha-bloqueada y frente-libre hacer avanza;
 fin sino inicio
 media-vuelta; avanza;  media-vuelta;
 fin;
 si derecha-libre entonces inicio
 mide(0);
 fin;    *)
 fin;


 define-nueva-instruccion dism(n) como inicio
  si no si-es-cero(n) y frente-libre entonces inicio
   avanza;
   dism(precede(n));
  fin
  sino inicio
   si no si-es-cero(n) y frente-bloqueado entonces inicio
    media-vuelta;
   fin;
  fin;
  fin;

 define-nueva-instruccion compara(n) como inicio
 si frente-libre entonces inicio
  avanza;
  compara(sucede(n));
 fin
 sino inicio
  media-vuelta;
  dism(99);
  si orientado-al-norte entonces inicio
  media-vuelta; mientras frente-libre hacer avanza;
  media-vuelta; repetir n veces avanza; si no junto-a-zumbador entonces deja-zumbador;  apagate;
  fin
  sino inicio
  mientras frente-libre hacer avanza; media-vuelta; repetir n veces avanza;
  gira-derecha;
  fin;
 fin;
 fin;



 define-nueva-instruccion busca(n) como inicio
   si orientado-al-este entonces inicio
   gira-derecha;
   si no junto-a-zumbador entonces inicio
   compara(0);
   fin
   sino inicio
   compara(0);
   fin;
   fin;
 si algun-zumbador-en-la-mochila y no junto-a-zumbador  entonces inicio
   si frente-libre entonces inicio
   si no junto-a-zumbador entonces deja-zumbador; avanza;
   busca(n);
   media-vuelta; avanza; media-vuelta;
   coge-zumbador;
   fin;

   si derecha-libre entonces inicio
    si no junto-a-zumbador entonces deja-zumbador; gira-derecha; avanza;
    busca(n);
    media-vuelta; avanza; gira-derecha;
    coge-zumbador;
   fin;

   si izquierda-libre entonces inicio
   si no junto-a-zumbador entonces deja-zumbador; gira-izquierda; avanza;
   busca(n);
   media-vuelta; avanza; gira-izquierda;
  coge-zumbador;
   fin;
 fin;
fin;

     inicia-ejecucion
     encuentra(0);
     gira-derecha; avanza;
     busca(0);

        apagate;
    termina-ejecucion
finalizar-programa
