iniciar-programa
 define-nueva-instruccion b(bb) como
  inicio
   deja-zumbador;
   repetir 4 veces
    inicio
     si no-orientado-al-sur entonces
      inicio
       si frente-libre entonces
        inicio
         avanza;
         si junto-a-zumbador entonces
          inicio
           gira-izquierda;
           gira-izquierda;
           avanza;
           gira-izquierda;
           gira-izquierda;
          fin
         sino
          inicio
           si frente-bloqueado y orientado-al-norte entonces
            inicio
             gira-izquierda;
             mientras frente-libre hacer
                 avanza;
             gira-izquierda;
             mientras frente-libre hacer
                 avanza;
             gira-izquierda;
             mientras junto-a-zumbador hacer
                 coge-zumbador;
             mientras frente-libre hacer
              inicio
               avanza;
               mientras junto-a-zumbador hacer
                   coge-zumbador;
              fin;
             gira-izquierda;
             gira-izquierda;
             repetir bb veces
                 avanza;
             deja-zumbador;
             deja-zumbador;
             si frente-libre entonces
                 avanza;
             gira-izquierda;
            fin
           sino
            inicio
             si no si-es-cero(bb) entonces
              inicio
               si orientado-al-oeste entonces
                inicio
                 b(precede(bb));
                 si orientado-al-sur entonces
                  inicio
                   repetir 3 veces
                       gira-izquierda;
                   deja-zumbador;
                   si frente-libre entonces
                    inicio
                     avanza;
                     gira-izquierda;
                    fin
                   sino
                    inicio
                     apagate;
                    fin;
                  fin
                 sino
                  inicio
                   gira-izquierda;
                   gira-izquierda;
                   avanza;
                   gira-izquierda;
                   gira-izquierda;
                  fin;
                fin
               sino
                inicio
                 si orientado-al-norte entonces
                  inicio
                   b(precede(bb));
                   si orientado-al-sur entonces
                    inicio
                     repetir 3 veces
                         gira-izquierda;
                     deja-zumbador;
                     deja-zumbador;
                     si frente-libre entonces
                      inicio
                       avanza;
                       gira-izquierda;
                      fin
                     sino
                      inicio
                       apagate;
                      fin;
                    fin
                   sino
                    inicio
                     gira-izquierda;
                     gira-izquierda;
                     avanza;
                     gira-izquierda;
                     gira-izquierda;
                    fin;
                  fin
                 sino
                  inicio
                   b(precede(bb));
                   si orientado-al-sur entonces
                    inicio
                     repetir 3 veces
                         gira-izquierda;
                     repetir 3 veces
                         deja-zumbador;
                     si frente-libre entonces
                      inicio
                       avanza;
                       gira-izquierda;
                      fin
                     sino
                      inicio
                       apagate;
                      fin;
                    fin
                   sino
                    inicio
                     gira-izquierda;
                     gira-izquierda;
                     avanza;
                     gira-izquierda;
                     gira-izquierda;
                    fin;
                  fin;
                fin;
              fin
             sino
              inicio
               gira-izquierda;
               gira-izquierda;
               avanza;
               gira-izquierda;
               gira-izquierda;
              fin;
            fin;
          fin;
        fin;
      fin;
     si no-orientado-al-sur o frente-libre o junto-a-zumbador entonces
         gira-izquierda;
    fin;
   si frente-libre o no-orientado-al-sur o junto-a-zumbador entonces
       coge-zumbador;
  fin;
 define-nueva-instruccion a(aa) como
  inicio
   si junto-a-zumbador entonces
    inicio
     coge-zumbador;
     a(sucede(aa));
    fin
   sino
    inicio
     b(aa);
    fin;
  fin;
 define-nueva-instruccion g como
  inicio
   si no-junto-a-zumbador entonces
    inicio
     avanza;
     g;
     deja-zumbador;
    fin;
  fin;
    inicia-ejecucion
     gira-izquierda;
     deja-zumbador;
     repetir 2 veces
      inicio                                      
       mientras frente-libre hacer
           avanza;
       gira-izquierda;
       gira-izquierda;
       g;
      fin;
     coge-zumbador;
     a(0);
        apagate;
    termina-ejecucion
finalizar-programa
