iniciar-programa
define-nueva-instruccion g(n) como
  inicio
   repetir n veces gira-izquierda;
  fin;

  define-nueva-instruccion ubica como
    inicio
      g(3);
      si frente-libre entonces avanza;
      deja-zumbador;
      g(2);
      si frente-libre entonces avanza;
      g(3);
   fin;

  define-nueva-instruccion deja(n) como
    inicio
       si junto-a-zumbador entonces
          inicio
            coge-zumbador;
            deja(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);
               ubica;
               deja(0);
               regresa;

             fin;

          si frente-libre entonces avanza;

       fin;
        si junto-a-zumbador entonces
             inicio
               g(2);
               ubica;
               deja(0);
               regresa;

             fin;
          g(2);
          cuenta(0);


        apagate;
    termina-ejecucion
finalizar-programa
