iniciar-programa
    define-nueva-instruccion re como inicio
       mientras no-orientado-al-norte hacer
         gira-izquierda;
       mientras frente-libre hacer
          avanza;
       mientras no-orientado-al-oeste hacer
          gira-izquierda;
       mientras frente-libre hacer
          avanza;
       repetir 2 veces
          gira-izquierda;
    fin;
    define-nueva-instruccion la como inicio
       si junto-a-zumbador entonces inicio
          coge-zumbador;
          si junto-a-zumbador entonces inicio
             coge-zumbador;
             la;
             repetir 2 veces
                deja-zumbador;
          fin
          sino inicio
             avanza;
          fin;
       fin
       sino inicio
          avanza;
       fin;
    fin;
    define-nueva-instruccion me(n) como inicio
       si junto-a-zumbador y no si-es-cero(n) entonces inicio
          coge-zumbador;
          me(precede(n));
          deja-zumbador;
       fin
       sino inicio
          si no si-es-cero(n) entonces
             gira-izquierda;
       fin;
    fin;
    define-nueva-instruccion ge(n) como inicio
       si orientado-al-norte entonces inicio
          si frente-libre entonces inicio
             avanza;
             ge(n);
             avanza;
          fin
          sino inicio
             gira-izquierda;
             ge(n);
             repetir 3 veces
                gira-izquierda;
          fin;
      fin
      sino inicio
         si frente-libre entonces inicio
            avanza;
            ge(n);
            avanza;
      fin
      sino inicio
         me(n);
         si orientado-al-sur entonces inicio
            mientras junto-a-zumbador hacer
               coge-zumbador;
            repetir n veces
               deja-zumbador;
         gira-izquierda;
         fin
         sino inicio
            repetir 2 veces
               gira-izquierda;
         fin;
      fin;
      fin;
   fin;
   define-nueva-instruccion pe(n) como inicio
      repetir 4 veces inicio
         si orientado-al-norte  entonces inicio
            ge(n);
            repetir 2 veces
               gira-izquierda;
         fin;
         gira-izquierda;
      fin;
   fin;
   define-nueva-instruccion do(n) como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         si junto-a-zumbador entonces inicio
            coge-zumbador;
            do(sucede(n));
         fin
         sino inicio
            pe(n);
         fin;
      fin
      sino inicio
         pe(n);
      fin;
   fin;
   define-nueva-instruccion fa(n) como inicio
      mientras junto-a-zumbador hacer
         coge-zumbador;
      repetir 3 veces
         gira-izquierda;
      repetir 3 veces inicio
         si frente-libre entonces inicio
            avanza;
            si junto-a-zumbador entonces inicio
               si orientado-al-norte y frente-bloqueado y izquierda-bloqueada o orientado-al-oeste y frente-bloqueado y derecha-bloqueada entonces inicio
               fin
               sino inicio
                  coge-zumbador;
                  si junto-a-zumbador entonces inicio
                     deja-zumbador;
                     fa(2);
                  fin
                  sino inicio
                     deja-zumbador;
                     fa(1);
                  fin;
               fin;
            fin;
          repetir 2 veces
             gira-izquierda;
          avanza;
          repetir 2 veces
             gira-izquierda;
      fin;
      gira-izquierda;
      fin;
      si frente-libre y no si-es-cero(n) entonces inicio
         si si-es-cero(precede(n)) entonces
            deja-zumbador
         sino inicio
            repetir 2 veces
               deja-zumbador;
         fin;
         la;
         repetir 2 veces
            gira-izquierda;
         avanza;
      fin
      sino inicio
         repetir 2 veces
            gira-izquierda;
      fin;
   fin;
   define-nueva-instruccion cu como inicio
      repetir 2 veces
         gira-izquierda;
      mientras frente-libre hacer
         avanza;
      gira-izquierda;
      avanza;
      gira-izquierda;
   fin;
   define-nueva-instruccion va como inicio
      avanza;
      mientras frente-libre o derecha-libre hacer inicio
         mientras frente-libre y no-junto-a-zumbador hacer
            avanza;
         si junto-a-zumbador entonces inicio
            coge-zumbador;
            si junto-a-zumbador entonces inicio
               fa(0);
               repetir 2 veces
                  deja-zumbador;
            fin
            sino inicio
               fa(0);
               deja-zumbador;
            fin;
            do(0);
         fin
         sino inicio
            si derecha-libre entonces
               cu;
         fin;
      fin;
   fin;
   define-nueva-instruccion er como inicio
      si junto-a-zumbador entonces inicio
         coge-zumbador;
         er;
         deja-zumbador;
      fin
      sino inicio
         mientras frente-libre hacer
            avanza;
      fin;
   fin;
    inicia-ejecucion
        re;
        si junto-a-zumbador entonces inicio
           coge-zumbador;
           si junto-a-zumbador entonces inicio
              fa(0);
              repetir 2 veces
                 deja-zumbador;
           fin
           sino inicio
              deja-zumbador;
              fa(0);
           fin;
           do(0);
        fin;
        va;
        re;
        repetir 3 veces
           gira-izquierda;
        er;
        apagate;
    termina-ejecucion
finalizar-programa
