iniciar-programa
   define-nueva-instruccion gira(n) como inicio
      repetir n veces
         gira-izquierda;
   fin;
   define-nueva-instruccion norte como inicio
      mientras no-orientado-al-norte hacer
         gira(1);
   fin;
   define-nueva-instruccion sur como inicio
      mientras no-orientado-al-sur hacer
         gira(1);
   fin;
   define-nueva-instruccion este como inicio
      mientras no-orientado-al-este hacer
         gira(1);
   fin;
   define-nueva-instruccion oeste como inicio
      mientras no-orientado-al-oeste hacer
         gira(1);
   fin;
   define-nueva-instruccion bmaximo(n) como inicio
      si junto-a-zumbador y no si-es-cero(n) entonces inicio
         coge-zumbador;
         bmaximo(precede(n));
         deja-zumbador;
      fin
      sino inicio
         repetir n veces
            deja-zumbador;
      fin;
   fin;
   define-nueva-instruccion comparacion(n) como inicio
      si junto-a-zumbador y frente-libre y no-orientado-al-norte entonces inicio
         avanza;
         comparacion(n);
         avanza;
      fin
      sino inicio
         si orientado-al-oeste y no-junto-a-zumbador entonces inicio
            este;
            avanza;
            norte;
            comparacion(n);
            oeste;
            avanza;
            este;
         fin
         sino inicio
            bmaximo(n);
            este;
         fin;
      fin;
   fin;
   define-nueva-instruccion compara(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         compara(sucede(n));
         deja-zumbador;
      fin
      sino inicio
         deja-zumbador;
         comparacion(n);
         coge-zumbador;
      fin;
   fin;
   define-nueva-instruccion importante(n) como inicio
      si junto-a-zumbador y no si-es-cero(n) entonces inicio
         coge-zumbador;
         importante(precede(n));
         deja-zumbador;
      fin
      sino inicio
         si si-es-cero(n) y junto-a-zumbador entonces inicio
            norte;
            avanza;
            oeste;
            compara(1);
            sur;
            avanza;
            este;
         fin;
      fin;
   fin;
   define-nueva-instruccion busca(n) como inicio
      norte;
      avanza;
      deja-zumbador;
      sur;
      avanza;
      este;
      avanza;
      mientras junto-a-zumbador hacer inicio
         importante(n);
         avanza;
      fin;
   fin;
   define-nueva-instruccion vista(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         vista(sucede(n));
      fin
      sino inicio
         repetir n veces
            deja-zumbador;
         este;
         busca(n);
      fin;
   fin;
   define-nueva-instruccion calculo(n) como inicio
      si frente-libre entonces inicio
         oeste;
         repetir n veces inicio
            si frente-libre entonces inicio
               avanza;
            fin
            sino inicio
               sur;
            fin;
         fin;
         si orientado-al-oeste entonces inicio
            vista(0);
            calculo(sucede(n));
         fin;
      fin;
   fin;
   define-nueva-instruccion max(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         max(sucede(n));
      fin
      sino inicio
         avanza;
         si junto-a-zumbador entonces inicio
            bmaximo(n);
         fin
         sino inicio
            oeste;
            mientras frente-libre hacer
               avanza;
            sur;
            avanza;
            mientras junto-a-zumbador hacer
               coge-zumbador;
            repetir n veces
               deja-zumbador;
         fin;
      fin;
   fin;
   define-nueva-instruccion maximo como inicio
      este;
      mientras junto-a-zumbador hacer
         avanza;
      calculo(1);
      norte;
      avanza;
      este;
      mientras orientado-al-este hacer
         max(0);
      este;
      avanza;
      mientras junto-a-zumbador hacer inicio
         mientras junto-a-zumbador hacer
            coge-zumbador;
         avanza;
      fin;
      apagate;
   fin;
   inicia-ejecucion
      maximo;
      apagate;
   termina-ejecucion
finalizar-programa