iniciar-programa
define-nueva-instruccion gd como
repetir 3 veces gira-izquierda;
define-nueva-instruccion mv como
repetir 2 veces gira-izquierda;
    inicia-ejecucion
    si orientado-al-este entonces gira-izquierda;
    si orientado-al-sur entonces mv;
    si orientado-al-oeste entonces gd;
    mientras frente-libre hacer
    inicio
         si no-junto-a-zumbador entonces
            inicio
            repetir 50 veces
            inicio
            si frente-libre entonces
                inicio
                avanza;si junto-a-zumbador entonces coge-zumbador;
                fin;
            si frente-bloqueado entonces
                inicio
                si izquierda-bloqueada entonces
                    inicio
                    gd;avanza;gira-izquierda;si frente-libre entonces
                        inicio
                        avanza;gira-izquierda;avanza;gd;mientras frente-libre hacer
                            inicio
                            si junto-a-zumbador entonces coge-zumbador;avanza;
                            fin;
                        si junto-a-zumbador entonces coge-zumbador;
                        mv;mientras frente-libre hacer avanza;gira-izquierda;avanza;gd;avanza;gd;avanza;gira-izquierda;mv;
                        fin;
                    si frente-bloqueado entonces
                        inicio
                        gira-izquierda;avanza;gira-izquierda;mv;
                        fin;
                    fin;
                si derecha-bloqueada entonces
                    inicio
                    gira-izquierda;avanza;gd;si frente-libre entonces
                        inicio
                        avanza;gd;avanza;gira-izquierda;mientras frente-libre hacer
                            inicio
                            si junto-a-zumbador entonces coge-zumbador;avanza;
                            fin;
                        si junto-a-zumbador entonces coge-zumbador;
                        mv;mientras frente-libre hacer avanza;gd;avanza;gira-izquierda;avanza;gira-izquierda;avanza;gd;avanza;mv;
                        fin;
                    si frente-bloqueado entonces
                        inicio
                        gd;avanza;gd;avanza;mv;
                        fin;
                    fin;
                si derecha-libre y izquierda-libre entonces
                    inicio
                    gd;avanza;gira-izquierda;si frente-bloqueado entonces
                        inicio
                        gira-izquierda;avanza;gd;
                        fin;
                    si frente-libre entonces
                        inicio
                        avanza;gira-izquierda;avanza;gd;mientras frente-libre hacer
                            inicio
                            si junto-a-zumbador entonces coge-zumbador;avanza;
                            fin;
                        si junto-a-zumbador entonces coge-zumbador;
                        mv;mientras frente-libre hacer avanza;gira-izquierda;avanza;gd;avanza;gd;avanza;gd;
                        mv;mientras frente-libre hacer avanza;gira-izquierda;si frente-libre entonces
                            inicio
                            avanza;gira-izquierda
                            fin;
                        si frente-bloqueado entonces
                inicio
                gira-izquierda;avanza;gd;si frente-libre entonces
                    inicio
                    avanza;gira-izquierda;repetir 49 veces
                        inicio
                        si junto-a-zumbador entonces coge-zumbador;avanza;
                        fin;
                    mv;mientras frente-libre hacer avanza;gira-izquierda;avanza;gira-izquierda;
                    fin;
                si frente-bloqueado entonces
                    inicio
                    mv;mientras frente-libre hacer avanza;gira-izquierda;avanza;mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                    apagate;
                    fin;
               fin;
                        fin;
                    fin;
                fin;
            fin;
            mv;mientras frente-libre hacer avanza;gira-izquierda;si frente-libre entonces
                inicio
                avanza;gira-izquierda;
                fin;
            si frente-bloqueado entonces
                inicio
                gira-izquierda;avanza;gd;si frente-libre entonces
                    inicio
                    avanza;gira-izquierda;repetir 49 veces
                        inicio
                        si junto-a-zumbador entonces coge-zumbador;avanza;
                        fin;
                    mv;mientras frente-libre hacer avanza;gira-izquierda;avanza;gira-izquierda;
                    fin;
                si frente-bloqueado entonces
                    inicio
                    mv;mientras frente-libre hacer avanza;gira-izquierda;avanza;mientras algun-zumbador-en-la-mochila hacer deja-zumbador;
                    apagate;
                    fin;
               fin;
            fin;
        si junto-a-zumbador entonces
        inicio
        gd;                              
        si frente-libre entonces
            inicio
            avanza;gira-izquierda;
            fin;
         si frente-bloqueado entonces
            inicio
            gira-izquierda;avanza;gd;avanza;gira-izquierda;repetir 49 veces
                inicio
                si junto-a-zumbador entonces coge-zumbador;avanza;
                fin;
            mv;mientras frente-libre hacer avanza;gira-izquierda;avanza;gira-izquierda;
            fin;
        fin;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
