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

      fin;
   define-nueva-instruccion compara (n) como
    inicio
       repetir n veces
         inicio
           si junto-a-zumbador entonces
             coge-zumbador;
          fin;
        repetir n veces deja-zumbador;

    fin;

  define-nueva-instruccion deja como
    inicio
        si no-junto-a-zumbador entonces
           repetir 2 veces deja-zumbador;
         repetir 4 veces
            inicio
                si frente-libre entonces
                   inicio
                     avanza;
                      si no-junto-a-zumbador entonces
                        inicio
                          deja;
                        fin;
                        g(2);
                        si frente-libre entonces avanza;
                       g(2);
                    fin;

                gira-izquierda;
            fin;

    fin;


  define-nueva-instruccion abajo como
     inicio
         aba;
         g(2);
         si frente-libre entonces avanza;
          g(3);
         si frente-libre entonces avanza;
    fin;

define-nueva-instruccion cuenta(n) como
   inicio
      mientras no orientado-al-norte hacer
        inicio
           si frente-libre entonces avanza;
     si junto-a-zumbador entonces
        inicio
          coge-zumbador;
            si junto-a-zumbador entonces
              inicio
                coge-zumbador;
                   si junto-a-zumbador entonces
                       inicio
                           coge-zumbador;
                              si junto-a-zumbador entonces
                                  inicio
                                    repetir 3 veces deja-zumbador;
                                    aba;
                                     si no-junto-a-zumbador entonces
                                      repetir n veces deja-zumbador
                                     sino
                                      compara(n);
                                    mientras no-orientado-al-norte hacer gira-izquierda;
                                  fin
                               sino
                                 inicio
                                   repetir 3 veces deja-zumbador;
                                   si orientado-al-este entonces
                                     inicio
                                       g(1);
                                       si frente-libre entonces avanza;
                                       g(1);
                                      fin
                                    sino
                                      inicio
                                         g(3);
                                         si frente-libre entonces avanza;
                                         g(3);
                                      fin;

                                fin;
                        fin
                       sino
                         inicio
                          deja-zumbador;
                          cuenta(sucede(n));
                        fin;
               fin
             sino
              si no-orientado-al-norte entonces
              deja-zumbador;

          fin

        fin;


   fin;

define-nueva-instruccion recorre como
  inicio
      si junto-a-zumbador entonces
        inicio
          coge-zumbador;
            si junto-a-zumbador entonces
              inicio
                coge-zumbador;
                   si junto-a-zumbador entonces
                       inicio
                           coge-zumbador;
                              si junto-a-zumbador entonces
                                  apagate
                               sino
                                 inicio
                                   repetir 3 veces deja-zumbador;
                                   si orientado-al-este entonces
                                     inicio
                                       g(1);
                                       si frente-libre entonces avanza;
                                       g(1);
                                      fin
                                    sino
                                      inicio
                                         g(3);
                                         si frente-libre entonces avanza;
                                         g(3);
                                      fin;

                                fin;
                        fin
                       sino
                        repetir 2 veces deja-zumbador;
               fin
             sino
              deja-zumbador;

          fin
        sino
          si no-orientado-al-sur y no-orientado-al-norte entonces
          inicio
             deja;
             abajo;
             cuenta(0);
             mientras no-orientado-al-norte hacer gira-izquierda;
          fin;
  fin;
    inicia-ejecucion
    si frente-libre entonces avanza;
    g(3);
    si frente-libre entonces avanza;
    repetir 4 veces
     inicio
         mientras junto-a-zumbador y frente-libre hacer
           inicio
              si orientado-al-norte o orientado-al-sur entonces
                repetir 2 veces deja-zumbador;
               si frente-libre entonces avanza;
            fin;
         si no-junto-a-zumbador entonces
             inicio
               g(2);
               si frente-libre entonces avanza;
               g(2);
              fin;

         si orientado-al-oeste o orientado-al-norte entonces
            deja-zumbador;
         g(1);
      fin;
     mientras frente-libre o frente-bloqueado hacer
     inicio
      mientras no orientado-al-norte hacer
       inicio
         si frente-libre entonces avanza;
         recorre;
       fin;
       abajo;
     fin;
        apagate;
    termina-ejecucion
finalizar-programa
