iniciar-programa
define-nueva-instruccion g(n) como
  inicio
    repetir n veces gira-izquierda;
  fin;
define-nueva-instruccion abajo como
  inicio
     mientras no-orientado-al-oeste hacer gira-izquierda;
     mientras frente-libre hacer avanza;
     gira-izquierda;
     mientras frente-libre hacer avanza;
    g(1);
  fin;
  define-nueva-instruccion lleva como
    inicio

       si frente-libre entonces avanza;
       mientras junto-a-zumbador hacer
         inicio
          coge-zumbador;
          g(2);
          si frente-libre entonces avanza;
          g(2);
          deja-zumbador;
         si frente-libre entonces avanza;
         fin;
           g(2);
           si frente-libre entonces avanza;
         g(2);         


    fin;
  define-nueva-instruccion trae como
    inicio
       g(2);
       si frente-libre entonces avanza;
       mientras junto-a-zumbador hacer
         inicio
          coge-zumbador;
          g(2);
          si frente-libre entonces avanza;
          g(2);
          deja-zumbador;
         si frente-libre entonces avanza;
         fin;
           g(2);
           si frente-libre entonces avanza;

    fin;
  define-nueva-instruccion busca como
    inicio

     repetir 4 veces
       inicio
         si frente-libre entonces
           inicio
              avanza;
                si junto-a-zumbador entonces
                   inicio
                      coge-zumbador;
                           trae;
                           busca;

                          g(2);
                          si frente-libre entonces avanza;
                          g(2);
                         lleva;
                    fin
                      sino
                        inicio
                        g(2);
                         si frente-libre entonces avanza;
                        g(2);
                       fin;

          fin;
           gira-izquierda;
       fin;

    fin;
   define-nueva-instruccion cuenta(n) como
     inicio
       si junto-a-zumbador entonces
         inicio
           coge-zumbador;
           cuenta(sucede(n));
         fin;
        si no-orientado-al-norte entonces
          inicio
            abajo;
            si no-junto-a-zumbador entonces
               repetir n veces deja-zumbador
           sino
              inicio
                 repetir n veces
                   inicio
                     si junto-a-zumbador entonces
                       coge-zumbador;
                    fin;
                  repetir n veces deja-zumbador;

              fin;
           mientras no-orientado-al-norte hacer
             gira-izquierda;
          fin;

     fin;
 define-nueva-instruccion recorre como
   inicio
      mientras no-junto-a-zumbador y frente-libre hacer avanza;
      si junto-a-zumbador entonces
        inicio
           coge-zumbador;
            busca;
           cuenta(0);
          mientras no-orientado-al-este hacer gira-izquierda;
          si frente-libre entonces avanza;

        fin;
      si frente-bloqueado y izquierda-libre entonces
        inicio
          g(2);
          mientras frente-libre hacer avanza;
          g(3);
          si frente-libre entonces avanza;
          g(3);
        fin;


   fin;

    inicia-ejecucion
      abajo;
      mientras no(frente-bloqueado y izquierda-bloqueada) hacer
      recorre;

        apagate;
    termina-ejecucion
finalizar-programa
