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-nueva-instruccion busca(n) como inicio
   si no junto-a-zumbador entonces inicio
   si frente-libre  entonces inicio
   deja-zumbador;   deja-zumbador;
   avanza;
   busca(n);
   media-vuelta; avanza; coge-zumbador; coge-zumbador; media-vuelta;
   fin;
   si izquierda-libre entonces inicio
   gira-izquierda;   deja-zumbador; deja-zumbador;
   avanza;
   busca(n);
   media-vuelta; avanza; coge-zumbador; coge-zumbador; gira-izquierda;
   fin;
   si derecha-libre entonces inicio
   gira-derecha;  deja-zumbador; deja-zumbador;
   avanza;
   busca(n);
   media-vuelta; avanza; coge-zumbador; coge-zumbador; gira-derecha;
   fin;
   fin
   sino inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
     si junto-a-zumbador entonces inicio
      coge-zumbador;
       fin
       sino  inicio
       repetir 300  veces deja-zumbador; deja-zumbador;
       sal-de-instruccion;
       fin;
      si no junto-a-zumbador entonces inicio
       repetir 2 veces deja-zumbador;
       sal-de-instruccion;
      fin;
       fin;
   fin;
   fin;
 define-nueva-instruccion resta(n) como inicio
  si no si-es-cero(n) y junto-a-zumbador entonces inicio
  coge-zumbador;
  resta(precede(n));
  deja-zumbador;
  fin
  sino inicio
  si si-es-cero (n) y junto-a-zumbador entonces mientras junto-a-zumbador hacer coge-zumbador;
  fin;
  fin;

 define-nueva-instruccion busca1(n) como inicio
   si no junto-a-zumbador entonces inicio
   si frente-libre  entonces inicio
   deja-zumbador;
   avanza;
   busca1(sucede(n));
   media-vuelta; avanza; coge-zumbador; media-vuelta;
   fin;
   si izquierda-libre entonces inicio
   gira-izquierda;  deja-zumbador;
   avanza;
   busca1(sucede(n));
   media-vuelta; avanza; coge-zumbador; gira-izquierda;
   fin;
   si derecha-libre entonces inicio
   gira-derecha;     deja-zumbador;
   avanza;
   busca1(sucede(n));
   media-vuelta; avanza; coge-zumbador; gira-derecha;
   fin;
   fin
   sino inicio
    resta(n);
   fin;
   fin;

define-nueva-instruccion mide(N) como inicio
 si frente-libre y no junto-a-zumbador  entonces inicio
  avanza;
  mide(sucede(n));
   sal-de-instruccion;
 fin
 sino inicio
  si frente-bloqueado y no junto-a-zumbador entonces inicio
   si izquierda-libre entonces gira-izquierda sino gira-derecha;
   mide(n);
   sal-de-instruccion;
  fin
  sino si junto-a-zumbador entonces inicio
   si orientado-al-norte o orientado-al-sur entonces inicio
   gira-derecha; avanza;
   fin
   sino inicio
   si orientado-al-oeste y izquierda-bloqueada entonces inicio
   media-vuelta; avanza;
   fin
   sino avanza;
   fin;
   mientras junto-a-zumbador hacer coge-zumbador;
   repetir n veces deja-zumbador;
   media-vuelta; avanza;
   gira-derecha;
  fin;
 fin;
 fin;

 define-nueva-instruccion menor(n) como inicio
  si junto-a-zumbador entonces inicio
  coge-zumbador;
  menor(sucede(n));
  fin
  sino inicio
  avanza;
  avanza;
  resta(n);
  fin;
  fin;

  define-nueva-instruccion terminar(n) como inicio
  si junto-a-zumbador entonces inicio
  coge-zumbador;
  terminar(sucede(n));
  fin
  sino inicio
   media-vuelta; avanza;
    mientras no orientado-al-norte hacer gira-izquierda;
    repetir n veces
    si junto-a-zumbador y orientado-al-norte entonces inicio
     coge-zumbador;
    fin
    sino inicio
    mientras no orientado-al-sur hacer gira-izquierda;
    deja-zumbador;
    fin;
  fin;
  fin;




define-nueva-instruccion  chuzpa como inicio
       si no-junto-a-zumbador  entonces inicio
           deja-zumbador;
            deja-zumbador;
           repetir 4 veces inicio
              si frente-libre entonces inicio
                avanza;
              si junto-a-zumbador entonces inicio
                  coge-zumbador;
               si junto-a-zumbador entonces inicio
                  coge-zumbador;
               si junto-a-zumbador entonces inicio
               deja-zumbador; deja-zumbador;
               gira-izquierda;
               mientras frente-libre hacer avanza;
               gira-derecha;
               mientras frente-libre hacer avanza;
               media-vuelta;
               mide(0);
               mientras no orientado-al-sur hacer  gira-izquierda;
               mientras frente-libre hacer avanza;
               gira-izquierda;
               mientras frente-libre hacer avanza;
               media-vuelta;
               mide(0);
               gira-derecha; avanza;  media-vuelta;
               menor(0);
               terminar(0);
               apagate;
               fin sino inicio
               repetir 2 veces deja-zumbador;
               fin;
               fin;
             fin;
               chuzpa;
              repetir 2 veces
               gira-izquierda;
               avanza;
              repetir 2 veces
               gira-izquierda;
               fin;
               gira-izquierda;
               fin;
              fin;
              fin;
    inicia-ejecucion
    si orientado-al-norte y frente-libre y derecha-libre entonces inicio
     si frente-libre entonces inicio
      avanza;
       si frente-libre y derecha-bloqueada y izquierda-bloqueada entonces inicio
        avanza;
         si frente-libre entonces inicio
          media-vuelta;
          avanza;
          avanza;
          media-vuelta;
         fin
         sino inicio
          media-vuelta; avanza; avanza;
          gira-izquierda; avanza; gira-izquierda;
          si frente-libre entonces inicio
          avanza;  gira-derecha; avanzA;
          repetir 1 veces deja-zumbador;
          apagate;
          fin sino inicio
          gira-izquierda; avanza; gira-derecha;
          fin;
         fin;
        fin
        sino inicio
         media-vuelta; avanza;
         media-vuelta;
       fin;
       fin;
      fin;



    busca(0);
    mientras junto-a-zumbador hacer coge-zumbador;
    busca1(0);
    chuzpa;
        apagate;
    termina-ejecucion
finalizar-programa

