iniciar-programa
define-nueva-instruccion g(n) como
  inicio
   repetir n veces gira-izquierda;
  fin;
  define-nueva-instruccion revisa (n) como
    inicio
       si junto-a-zumbador entonces
         inicio
           coge-zumbador;
           revisa(sucede(n));
         fin;
    si no-orientado-al-oeste y no-orientado-al-norte entonces
      inicio
         repetir 4 veces
           inicio
              si frente-libre entonces
                inicio
                  avanza;
                 si orientado-al-sur o orientado-al-norte entonces
                   inicio
                     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;
                                gira-izquierda;
                           fin;
                        fin;
                       si orientado-al-este o orientado-al-oeste entonces
                         g(3)
                      sino
                         inicio
                          repetir n veces deja-zumbador;
                           g(2);
                           si frente-libre entonces avanza;
                           g(2);
                           deja-zumbador;
                           si frente-libre entonces avanza;
                         fin;

                    fin
                    sino
                     si orientado-al-este o orientado-al-oeste entonces
                        inicio
                            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;
                                      gira-izquierda;
                                  fin;
                              fin;
                       si orientado-al-norte o orientado-al-sur entonces
                         g(3)
                      sino
                          inicio
                           repetir n veces deja-zumbador;
                            g(2);
                           si frente-libre entonces avanza;
                           g(2);
                           deja-zumbador;
                           si frente-libre entonces avanza
                         fin;

                       fin;
                         gira-izquierda;
            si frente-libre entonces
               inicio
                       avanza;
                       si orientado-al-sur o orientado-al-norte entonces
                           inicio
                              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;
                                       gira-izquierda;
                                     fin;
                                 fin;
                            si orientado-al-este o orientado-al-oeste entonces
                              g(3)
                            sino
                               inicio
                                 repetir n veces deja-zumbador;
                                 g(2);
                                 si frente-libre entonces avanza;
                                 g(3);
                                 si frente-libre entonces avanza;
                                 deja-zumbador;
                                 g(2);
                                 si frente-libre entonces avanza;
                                 g(1);
                                 si frente-libre entonces avanza;
                               fin;
                       fin
                    sino
                     si orientado-al-este o orientado-al-oeste entonces
                        inicio
                            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;
                                       gira-izquierda;

                                  fin;
                               fin;
                          si orientado-al-norte o orientado-al-sur entonces
                            g(3)
                          sino
                             inicio
                                repetir n veces deja-zumbador;
                                g(2);
                                 si frente-libre entonces avanza;
                                 g(3);
                                 si frente-libre entonces avanza;
                                 deja-zumbador;
                                 g(2);
                                 si frente-libre entonces avanza;
                                 g(1);
                                 si frente-libre entonces avanza;

                            fin;
                       fin;
                  g(2);
                  si frente-libre entonces avanza;
                  g(3);
                  si frente-libre entonces avanza;
                  g(2);

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

                fin;
               gira-izquierda;

           fin;

        si junto-a-zumbador entonces
         inicio
          mientras no-orientado-al-norte hacer
            gira-izquierda;
           mientras junto-a-zumbador hacer coge-zumbador;

         fin
        sino
           mientras no-orientado-al-oeste hacer gira-izquierda;

        repetir n veces deja-zumbador;
      fin;

    fin;
   define-nueva-instruccion v como
    inicio
        g(2);
        mientras frente-libre hacer avanza;
        g(3);
        si frente-libre entonces avanza;
        g(3);

    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;
     g(1);

  fin;
define-nueva-instruccion recorre(n) como
  inicio
  mientras no(frente-bloqueado y izquierda-bloqueada) hacer
   inicio
    si junto-a-zumbador entonces
     inicio
       revisa(0);
       si orientado-al-oeste entonces
         inicio
            mientras no-orientado-al-este hacer gira-izquierda;
            si frente-libre entonces avanza
            sino
            v;
           recorre(sucede(n));
        fin
        sino
          inicio
             mientras no-orientado-al-este hacer gira-izquierda;
             si frente-libre entonces avanza
              sino
               v;
              recorre(n)

          fin;
      fin
      sino
       inicio
         si frente-libre entonces avanza
          sino
           v;
          recorre(n);
        fin;
  fin;
   si junto-a-zumbador entonces
     inicio
       revisa(0);
       si orientado-al-oeste entonces
         inicio
            mientras no-orientado-al-este hacer gira-izquierda;

            aba;
           mientras junto-a-zumbador hacer coge-zumbador;
           repetir n veces deja-zumbador;
           deja-zumbador;
            apagate;

        fin
        sino
          inicio
            aba;
           mientras junto-a-zumbador hacer coge-zumbador;
           repetir n veces deja-zumbador;
            apagate;


          fin;
      fin

  fin;

    inicia-ejecucion
    aba;
    recorre(0);
        apagate;
    termina-ejecucion
finalizar-programa
