iniciar-programa
define-nueva-instruccion gd como inicio
    repetir 3 veces inicio
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion norte como inicio
    si orientado-al-este entonces inicio
        gira-izquierda;
    fin;
    si orientado-al-oeste entonces inicio
        gd;
    fin;
    si orientado-al-sur entonces inicio
        gira-izquierda;
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion quitapar como inicio
               gira-izquierda;
               gira-izquierda;
               avanza;
               mientras junto-a-zumbador hacer inicio
                   coge-zumbador;
               fin;
               norte;
               gira-izquierda;
               mientras frente-libre hacer inicio
                   avanza;
               fin;
               gira-izquierda;
               mientras frente-libre hacer inicio
                   avanza;
               fin;
               gira-izquierda;
               avanza;
               avanza;
               mientras algun-zumbador-en-la-mochila hacer inicio
                   deja-zumbador;
               fin;
               gira-izquierda;
               gira-izquierda;
               avanza;
               avanza;
               gd;
               avanza;
               gd;
fin;
define-nueva-instruccion recu como inicio
    si algun-zumbador-en-la-mochila entonces inicio
        deja-zumbador;
        recu;
        si junto-a-zumbador entonces inicio
            coge-zumbador;
        fin
        sino inicio
            si orientado-al-este o orientado-al-oeste entonces inicio
                gd;
            fin;
       fin;
    fin
    sino inicio
        gira-izquierda;
        gira-izquierda;
        avanza;
   fin;
fin;
define-nueva-instruccion recuespecial como inicio
    si algun-zumbador-en-la-mochila entonces inicio
        deja-zumbador;
        recuespecial;
        si junto-a-zumbador entonces inicio
            coge-zumbador;
        fin
        sino inicio
            si orientado-al-norte entonces inicio
                gira-izquierda;
            fin;
            mientras frente-libre hacer inicio
                gira-izquierda;
            fin;
       fin;
    fin
    sino inicio
        gira-izquierda;
        gira-izquierda;
        avanza;
    fin;
fin;
define-nueva-instruccion recu2 como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        recu2;
        deja-zumbador;
    fin
    sino inicio
        gira-izquierda;
        gira-izquierda;
        avanza;
    fin;
fin;
define-nueva-instruccion termina como inicio
       si orientado-al-norte y algun-zumbador-en-la-mochila entonces inicio
           gira-izquierda;
           mientras frente-libre hacer inicio
               avanza;
           fin;
           gira-izquierda;
           mientras frente-libre hacer inicio
               avanza;
           fin;
           deja-zumbador;
           gira-izquierda;
           avanza;
           avanza;
           mientras algun-zumbador-en-la-mochila hacer inicio
               deja-zumbador;
           fin;
           gira-izquierda;
           gira-izquierda;
           avanza;
           avanza;
           gd;
           avanza;
           gd;
       fin;
fin;
    inicia-ejecucion
    norte;
    avanza;
    gd;

    mientras no-orientado-al-norte hacer inicio
        si frente-bloqueado y orientado-al-este y izquierda-libre y no-junto-a-zumbador entonces inicio
            si junto-a-zumbador y ningun-zumbador-en-la-mochila entonces inicio
                mientras junto-a-zumbador hacer inicio
                    coge-zumbador;
                fin;
            fin;
            gira-izquierda;
            avanza;
            gira-izquierda;
       fin;
        si frente-bloqueado y orientado-al-oeste y derecha-libre y no-junto-a-zumbador entonces inicio
            si junto-a-zumbador y ningun-zumbador-en-la-mochila entonces inicio
                mientras junto-a-zumbador hacer inicio
                    coge-zumbador;
                fin;
            fin;
            gd;
            avanza;
            gd;
       fin;
       si junto-a-zumbador y ningun-zumbador-en-la-mochila entonces inicio
           mientras junto-a-zumbador hacer inicio
               coge-zumbador;
           fin;
       fin;
       si junto-a-zumbador y algun-zumbador-en-la-mochila entonces inicio
           gira-izquierda;
           gira-izquierda;
           si frente-libre entonces inicio
               avanza;
           fin
           sino inicio
               si orientado-al-este entonces inicio
                   gd;
               fin;
               si orientado-al-oeste entonces inicio
                   gira-izquierda;
               fin;
           fin;
           si no orientado-al-sur entonces inicio
               recu;
               si junto-a-zumbador entonces inicio
                   gd;
                   mientras algun-zumbador-en-la-mochila hacer inicio
                       deja-zumbador;
                   fin;
               fin;
               si orientado-al-este o orientado-al-oeste entonces inicio
                   quitapar;
               fin;
               si orientado-al-norte o orientado-al-sur entonces inicio
                   mientras algun-zumbador-en-la-mochila hacer inicio
                   deja-zumbador;
                   fin;
                   gd;
                   avanza;
                       mientras junto-a-zumbador hacer inicio
                       coge-zumbador;
                   fin;
                   gira-izquierda;
                   gira-izquierda;
                   avanza;
                   recu2;
                   gira-izquierda;
                   gira-izquierda;
              fin;
         fin
         sino inicio
             avanza;
             recuespecial;
             si junto-a-zumbador entonces inicio
                 mientras algun-zumbador-en-la-mochila hacer inicio
                     deja-zumbador;
                 fin;
                 si orientado-al-norte entonces inicio
                     gira-izquierda;
                 fin;
                 mientras frente-libre hacer inicio
                     gira-izquierda;
                 fin;
             fin;
             si frente-bloqueado y no-orientado-al-norte entonces inicio
                si orientado-al-este entonces inicio
                    gd;
                fin
                sino inicio
                    gira-izquierda;
               fin;
               mientras algun-zumbador-en-la-mochila hacer inicio
                   deja-zumbador;
               fin;
               avanza;
               mientras junto-a-zumbador hacer inicio
                   coge-zumbador;
               fin;
               gira-izquierda;
               gira-izquierda;
               avanza;
               recu2;
               gira-izquierda;
               gira-izquierda;
               avanza;
               gira-izquierda;
               si frente-bloqueado entonces inicio
                   gira-izquierda;
                   gira-izquierda;
               fin;
            fin
            sino inicio
                quitapar;
            fin;
         fin;
         fin;

       si frente-libre entonces inicio
           avanza;
       fin;
       si orientado-al-este y frente-bloqueado y izquierda-bloqueada y no-junto-a-zumbador entonces inicio
           gira-izquierda;
       fin;
       si orientado-al-oeste y frente-bloqueado y derecha-bloqueada y no-junto-a-zumbador entonces inicio
           gd;
       fin;
       termina;
    fin;
    apagate;
    termina-ejecucion
finalizar-programa
