iniciar-programa
define-nueva-instruccion g(n) como
inicio
repetir n veces
inicio
gira-izquierda;
fin;
fin;
  define-nueva-instruccion reproduce(n) como
  inicio
  si junto-a-zumbador entonces
  inicio
  coge-zumbador;
  reproduce(sucede(n));

  fin
  sino
  inicio
  repetir n veces
  inicio
  deja-zumbador;
  fin;
   g(2);
   mientras frente-libre hacer
   inicio
   avanza;
   fin;
   g(3);
   si frente-libre entonces
   inicio
   avanza;
   fin;
   g(3);
   mientras frente-libre hacer
   inicio
   avanza;
   fin;
   g(3);
   si frente-libre entonces
   inicio
   avanza;
   fin;
   gira-izquierda;
   si frente-libre entonces
   inicio
   avanza;
   fin;
   gira-izquierda;
   si frente-libre entonces
   inicio
   avanza;
   fin;
   repetir precede(n) veces
   inicio
   deja-zumbador;
  fin;
  g(2);
  si frente-libre entonces
  inicio
  avanza;
  fin;
  g(3);
  mientras frente-libre hacer
  inicio
  avanza;
  fin;
  g(2);
  repetir 4 veces
  inicio
  si frente-libre entonces
  inicio
  avanza;
  fin;
  fin;
  fin;
  fin;
          define-nueva-instruccion kaka como
          inicio
             si junto-a-zumbador y orientado-al-este entonces
             inicio
                coge-zumbador;
                  kaka;
                  deja-zumbador;
                  si frente-libre entonces
                  inicio
                  avanza;
                  fin;

             fin
             sino
             inicio
             si orientado-al-este entonces
             inicio
               g(2);
               repetir 2 veces
               inicio
               avanza;
               fin;
               fin;
               si orientado-al-oeste y junto-a-zumbador entonces
               inicio
               coge-zumbador;
               kaka;
               si orientado-al-oeste entonces
               inicio
                mientras frente-libre hacer
                inicio
                avanza;
                fin;
                g(2);
               fin
               sino
               inicio
                si frente-libre entonces
                inicio
                avanza;
                fin;
               fin;

               fin
               sino
               inicio

               fin;

             fin;
          fin;
          define-nueva-instruccion conta como
          inicio
           si frente-libre entonces
           inicio
           avanza;
           conta;
               deja-zumbador;
           fin
           sino
           inicio
           g(3);
           si frente-libre entonces
           inicio
           avanza;
           fin;
           gira-izquierda;

             si frente-libre entonces
             inicio
             avanza;
             fin;
             mientras junto-a-zumbador hacer
             inicio
             coge-zumbador;
             fin;

           fin;
          fin;
          define-nueva-instruccion comparando(n) como
          inicio
           si junto-a-zumbador y no si-es-cero(n) entonces
           inicio
             coge-zumbador;
             comparando(precede(n));
           fin
           sino
           inicio
             si junto-a-zumbador entonces
             inicio
             g(2);
             si frente-libre entonces
             inicio
             avanza;
             fin;
             mientras junto-a-zumbador hacer
             inicio
             coge-zumbador;
             fin;
             deja-zumbador;
             apagate;


             fin
             sino
             inicio
               g(2);
               si frente-libre entonces
               inicio
               avanza;
               fin;
               g(3);
               mientras frente-libre hacer
               inicio
               avanza;
               fin;
               g(3);
               si frente-libre entonces
               inicio
               avanza;
               fin;
               g(3);
               conta;
               deja-zumbador;
               apagate;
             fin;
           fin;
          fin;

          define-nueva-instruccion compara(n) como
          inicio
            si no-junto-a-zumbador y frente-libre entonces
            inicio
            avanza;
            compara(sucede(n));
            fin
            sino
            inicio
              g(3);
              si frente-libre entonces
              inicio
              avanza;
              fin;
              g(3);
              mientras frente-libre hacer
              inicio
              avanza;
              fin;
              g(3);
              si frente-libre entonces
              inicio
              avanza;
              fin;
              gira-izquierda;
              si frente-libre entonces
              inicio
              avanza;
              fin;
              gira-izquierda;
              si frente-libre entonces
              inicio
              avanza;
              fin;
                comparando(n);
            fin;
          fin;

    inicia-ejecucion
     g(3);
     avanza;
      avanza;
      mientras junto-a-zumbador hacer
      inicio
      coge-zumbador;
      fin;
      g(2);
      avanza;
      g(2);
     reproduce(0);

      repetir 3 veces
     inicio
     avanza;
     fin;
      kaka;
      g(2);
      mientras frente-libre hacer
      inicio
      avanza;
      fin;
      g(3);
      si frente-libre entonces
      inicio
      avanza;
      fin;
      g(3);
        mientras frente-libre hacer
        inicio
        avanza;
        fin;
        g(3);
        si frente-libre entonces
        inicio
        avanza;
        fin;
        g(3);
        compara(0);
        apagate;
    termina-ejecucion
finalizar-programa
