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 comp(n) como inicio
      si junto-a-zumbador y no(si-es-cero(n)) entonces inicio
         coge-zumbador;
         comp(precede(n));
      fin
      sino inicio
         si junto-a-zumbador y (si-es-cero(n))entonces inicio
            oeste;
         fin;
         si no junto-a-zumbador y no(si-es-cero(n)) entonces inicio
            este;
            repetir n veces
               deja-zumbador;
         fin;
         si no junto-a-zumbador y (si-es-cero(n)) entonces inicio
            este;
         fin;
      fin;
   fin;
   define-nueva-instruccion menor(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         menor(precede(n));
      fin
      sino inicio
         repetir n veces
            deja-zumbador;
      fin;
   fin;

   define-nueva-instruccion orienta como inicio
      este;
      avanza;
      mientras frente-libre y junto-a-zumbador hacer
         avanza;
      si no-junto-a-zumbador entonces inicio
         gira(2);
         avanza;
      fin;
   fin;
   define-nueva-instruccion cuenta(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         cuenta(sucede(n));
      fin
      sino inicio
         repetir n veces
            deja-zumbador;
         oeste;
         mientras frente-libre hacer
            avanza;
         sur;
         mientras frente-libre hacer
            avanza;
         repetir n veces
            deja-zumbador;
         apagate;
      fin;
   fin;

   define-nueva-instruccion maximo(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         maximo(sucede(n));
      fin
      sino inicio
         repetir n veces
            deja-zumbador;
         este;
         avanza;
         norte;
         avanza;
         si junto-a-zumbador entonces inicio
            repetir n veces
               deja-zumbador;
            sur;
            avanza;
            oeste;
            avanza;
         fin
         sino inicio
            orienta;
            norte;
            si no-junto-a-zumbador entonces inicio
               sur;
               avanza;
               cuenta(0);
            fin;
         fin;
      fin;
   fin;
   define-nueva-instruccion compara(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         compara(sucede(n));
      fin
      sino inicio
         repetir n veces
            deja-zumbador;
      fin;
      oeste;
      avanza;
      comp(n);
      si orientado-al-este entonces inicio
         menor(n);
         avanza;
         norte;
         avanza;
         si junto-a-zumbador entonces inicio
            repetir n veces
               deja-zumbador;
            sur;
            avanza;
            oeste;
            avanza;
            norte;
            si junto-a-zumbador entonces
               compara(0);
         fin
         sino inicio
            orienta;
            norte;
            si no-junto-a-zumbador entonces inicio
               sur;
               avanza;
               cuenta(0);
            fin
            sino inicio
               compara(0);
            fin;
         fin;
      fin;
      si orientado-al-oeste entonces inicio
         repetir n veces
            deja-zumbador;
         maximo(0);
         compara(0);
      fin;
   fin;

   inicia-ejecucion
        orienta;
        compara(0);
        apagate;
    termina-ejecucion
finalizar-programa