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

           compara(n);
           si orientado-al-oeste entonces
           inicio
                 suma(0);

           fin
           sino
           inicio
                mientras no-orientado-al-oeste hacer
                g(1);
                avanza;
                g(1);
                avanza;
                g(2);
                repetir n veces
                deja-zumbador;

           fin;
     fin;
fin;
define-nueva-instruccion recorre como
inicio
      mientras no-orientado-al-sur hacer
      inicio
            mientras junto-a-zumbador hacer
            inicio
                   avanza;
                   dinamica(0);
                   g(1);
                   avanza;
                   g(3);
            fin;
           g(2);
           si frente-libre entonces
           inicio
                 avanza;
                 g(1);
                  mientras junto-a-zumbador y frente-libre hacer
                 avanza;
                 si no-junto-a-zumbador entonces
                 inicio
                      g(2);
                      avanza;
                      g(2);
                 fin;
                 g(1);
           fin;

      fin;
fin;
define-nueva-instruccion mayor(n) como
inicio
     si junto-a-zumbador entonces
     inicio
          coge-zumbador;
          mayor(sucede(n));
     fin
     sino
     inicio
          repetir n veces
          deja-zumbador;
          si frente-libre entonces
          avanza
          sino
          inicio
                g(2);
                mientras frente-libre hacer
                avanza;
                repetir n veces
                deja-zumbador;
                apagate;
          fin;
          si junto-a-zumbador entonces
          compara(n)
          sino
          inicio
                g(2);
                mientras frente-libre hacer
                avanza;
                repetir n veces
                deja-zumbador;
                apagate;
          fin;
          si orientado-al-oeste entonces
          inicio
               g(2);
               mayor(0);
          fin
          sino
          inicio
              mientras no-orientado-al-este hacer
              g(1);
              mientras junto-a-zumbador hacer
              coge-zumbador;
              mayor(n);
          fin;
     fin;
fin;
    inicia-ejecucion
    mientras no-orientado-al-este hacer
    g(1);
    avanza;
    mientras junto-a-zumbador y frente-libre hacer
    avanza;
    si no-junto-a-zumbador entonces
    inicio
         g(2);
         avanza;
         g(2);
    fin;
    g(1);
    mientras junto-a-zumbador y frente-libre hacer
    avanza;
     si no-junto-a-zumbador entonces
    inicio
         g(2);
         avanza;
         g(2);
    fin;
    g(2);
    avanza;
    g(2);
    recorre;
    g(1);
    avanza;
    mayor(0);
        apagate;
    termina-ejecucion
finalizar-programa
