iniciar-programa
define-nueva-instruccion g(n) como
repetir n veces
gira-izquierda;
define-nueva-instruccion compara(n) como
inicio
      repetir n veces
      inicio
            si junto-a-zumbador entonces
            inicio
                 coge-zumbador;
            fin
            sino
            inicio
                  mientras no-orientado-al-este hacer
                  g(1);
                  repetir precede(n) veces
                  deja-zumbador;
            fin;
      fin;
      si  no-orientado-al-este y junto-a-zumbador entonces
      inicio
           mientras no-orientado-al-este hacer
           g(1);
          repetir n veces
          deja-zumbador;
      fin;
     si no-junto-a-zumbador entonces
      repetir n veces
      deja-zumbador;
fin;
define-nueva-instruccion influenza(n) como
inicio
     repetir 4 veces
     inicio
          si frente-libre entonces
          inicio
                avanza;
                si no-junto-a-zumbador entonces
                repetir n veces
                deja-zumbador;
                g(2);
                avanza;
                g(2);
          fin;
          g(1);
     fin;
fin;
define-nueva-instruccion recorre(n) como
inicio
     mientras no-orientado-al-este hacer
     inicio
           si junto-a-zumbador entonces
           inicio
                si orientado-al-sur entonces
                inicio
                    compara(n);
                    si orientado-al-este entonces
                    influenza(n);
                    mientras no-orientado-al-sur hacer
                    g(1);
                fin
                sino
                si orientado-al-norte entonces
                inicio
                     compara(n);
                    si orientado-al-este entonces
                    influenza(n);
                    mientras no-orientado-al-norte hacer
                    g(1);
                fin;
           fin;
           si frente-libre entonces
           inicio
                 avanza;
           fin
           sino
           inicio
                 si orientado-al-norte entonces
                 inicio
                      g(3);
                      si frente-libre entonces
                      inicio
                           avanza;
                           g(3);
                      fin;
                 fin
                 sino
                 si orientado-al-sur entonces
                 inicio
                      g(1);
                      si frente-libre entonces
                      inicio
                           avanza;
                           g(1);
                      fin;
                 fin;
           fin;
     fin;
fin;
define-nueva-instruccion dias(n) como
inicio
     si junto-a-zumbador entonces
     inicio
           coge-zumbador;
           dias(sucede(n));
           recorre(n);
           mientras no-orientado-al-oeste hacer
           g(1);
           mientras frente-libre hacer
           avanza;
           g(1);
           mientras frente-libre hacer avanza;
           g(2);
     fin;


fin;
define-nueva-instruccion recoge(n) como
inicio

  mientras no-orientado-al-este hacer
  inicio

       si frente-libre entonces
           inicio
                 avanza;
           fin
           sino
           inicio
                 si orientado-al-norte entonces
                 inicio
                      g(3);
                      si frente-libre entonces
                      inicio
                           avanza;
                           g(3);
                      fin;
                 fin
                 sino
                 si orientado-al-sur entonces
                 inicio
                      g(1);
                      si frente-libre entonces
                      inicio
                           avanza;
                           g(1);
                      fin;
                 fin;
           fin;
            si junto-a-zumbador entonces
           inicio
           coge-zumbador;
           recoge(sucede(n));


            fin;
      fin;
       mientras no-orientado-al-oeste hacer
           g(1);
           mientras frente-libre hacer
           avanza;
           g(1);
           mientras frente-libre hacer avanza;
           g(2);
      repetir n veces
      deja-zumbador;
      apagate;
fin;
inicia-ejecucion
    dias(1);
    si junto-a-zumbador entonces
    inicio
          mientras junto-a-zumbador hacer
          coge-zumbador;
          recoge(1);
    fin
    sino
    recoge(0);
        apagate;
    termina-ejecucion
finalizar-programa
