iniciar-programa
define-nueva-instruccion g(n) como
inicio
    repetir n veces gira-izquierda;
fin;
define-nueva-instruccion marca como
inicio
      g(3);
      si frente-libre entonces avanza;
      deja-zumbador;
      g(2);
      si frente-libre entonces avanza;
      g(3);
fin;

define-nueva-instruccion checa(n) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        checa(sucede(n));
    fin;
    mientras no-orientado-al-norte hacer
    inicio

       si frente-libre entonces avanza;
       mientras frente-libre y no-junto-a-zumbador hacer
       avanza;
       repetir n veces
       inicio
           si junto-a-zumbador entonces
           coge-zumbador
           sino
           inicio
               repetir n veces deja-zumbador;
               si junto-a-zumbador entonces coge-zumbador;
               mientras no-orientado-al-sur hacer gira-izquierda;
           fin;
        fin;
        si orientado-al-sur entonces
        inicio
             g(1);
             si frente-libre entonces avanza;
             mientras junto-a-zumbador hacer coge-zumbador;
             repetir n veces deja-zumbador;
             g(2);
             si frente-libre entonces
             avanza;
             mientras no-orientado-al-norte hacer gira-izquierda;
        fin
        sino
        inicio
             repetir n veces deja-zumbador;
             si frente-bloqueado entonces
             inicio
                 mientras junto-a-zumbador hacer coge-zumbador;
                 repetir n veces deja-zumbador;
             fin;
        fin;
        si frente-bloqueado entonces
        mientras no-orientado-al-norte hacer gira-izquierda;
   fin;
fin;
define-nueva-instruccion regresa como
inicio
   si frente-libre entonces avanza;
   g(3);
   mientras frente-libre y no junto-a-zumbador hacer avanza;
   si junto-a-zumbador entonces
   inicio
       g(3);
       coge-zumbador;
       mientras frente-libre hacer avanza;
       g(1);
   fin;
fin;
define-nueva-instruccion cuenta(n) como
inicio
    mientras frente-libre hacer
    inicio
        mientras frente-libre y no junto-a-zumbador hacer avanza;
        si junto-a-zumbador entonces
        inicio
            mientras junto-a-zumbador hacer coge-zumbador;
            cuenta(sucede(n));
        fin;
    fin;
    si junto-a-zumbador entonces
    inicio
        mientras junto-a-zumbador hacer coge-zumbador;
        cuenta(sucede(n));
     fin;
     repetir n veces deja-zumbador;
     apagate;
fin;
 inicia-ejecucion
     mientras no-orientado-al-este hacer gira-izquierda;
     mientras frente-libre y no-junto-a-zumbador hacer avanza;
     si junto-a-zumbador entonces
     si frente-libre entonces avanza;
     mientras frente-libre hacer
     inicio
          si junto-a-zumbador entonces
          inicio
               g(2);
               marca;
               checa(0);
               regresa;
           fin;
           si frente-libre entonces avanza;
      fin;
      si junto-a-zumbador entonces
      inicio
           g(2);
           marca;
           checa(0);
           regresa;
      fin;
      g(2);
      cuenta(0);
    apagate;
    termina-ejecucion
finalizar-programa
