iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion coger1 como
    inicio
    mientras frente-libre y junto-a-zumbador hacer
        inicio
            si junto-a-zumbador entonces
                inicio
                    coge-zumbador;
                    si junto-a-zumbador entonces
                        inicio
                            deja-zumbador;
                            avanza;
                        fin
                     sino
                        inicio
                            avanza;
                            si junto-a-zumbador y frente-bloqueado entonces
                                inicio
                                    coge-zumbador;
                                    si junto-a-zumbador entonces deja-zumbador;
                                fin;
                        fin;
                fin;
       fin;
    fin;
define-nueva-instruccion dejar1 como
    inicio
        oeste;
        mientras frente-libre hacer avanza;
        norte;
        mientras algun-zumbador-en-la-mochila hacer
            inicio
                avanza;
                deja-zumbador;
            fin;
        si ningun-zumbador-en-la-mochila entonces
            inicio
                sur;
                mientras frente-libre hacer avanza;
                este;
            fin;
    fin;
define-nueva-instruccion coger2 como
    inicio
       mientras frente-libre hacer
           inicio
               mientras no-junto-a-zumbador y frente-libre hacer avanza;
               si junto-a-zumbador entonces
                   inicio
                       repetir 2 veces coge-zumbador;
                       si junto-a-zumbador entonces
                           inicio
                              repetir 2 veces deja-zumbador;
                              si frente-libre entonces avanza;
                              mientras no-junto-a-zumbador y frente-libre hacer avanza;
                           fin
                        sino
                           inicio
                               mientras no-junto-a-zumbador y frente-libre hacer avanza;
                           fin;
                   fin;
           fin;
           si frente-bloqueado y junto-a-zumbador entonces
               inicio
                   repetir 2 veces coge-zumbador;
                   si junto-a-zumbador entonces
                       inicio
                           repetir 2 veces deja-zumbador;
                           oeste;
                       fin;
               fin;
    fin;
define-nueva-instruccion dejar2 como
    inicio
        oeste;
        mientras frente-libre hacer avanza;
        norte;
        avanza;
        si junto-a-zumbador entonces
            inicio
                mientras junto-a-zumbador y frente-libre hacer avanza;
                si frente-libre entonces
                inicio
                    sur;
                    avanza;
                fin;
                este;
            fin;
        mientras algun-zumbador-en-la-mochila hacer
            inicio
                avanza;
                repetir 2 veces deja-zumbador;
            fin;
        si ningun-zumbador-en-la-mochila entonces
            inicio
                sur;
                mientras frente-libre hacer avanza;
                oeste;
                mientras frente-libre hacer avanza;
                este;
            fin;
    fin;
    define-nueva-instruccion coger3 como
    inicio
       mientras frente-libre hacer
           inicio
               mientras no-junto-a-zumbador y frente-libre hacer avanza;
               si junto-a-zumbador entonces
                   inicio
                       repetir 3 veces coge-zumbador;
                       si junto-a-zumbador entonces
                           inicio
                              repetir 3 veces deja-zumbador;
                              si frente-libre entonces avanza;
                              mientras no-junto-a-zumbador y frente-libre hacer avanza;
                           fin
                        sino
                           inicio
                               mientras no-junto-a-zumbador y frente-libre hacer avanza;
                           fin;
                   fin;
                   si junto-a-zumbador y frente-bloqueado entonces
                       inicio
                           repetir 3 veces coge-zumbador;
                           si junto-a-zumbador entonces
                               inicio
                                   repetir 3 veces deja-zumbador;
                                   oeste;
                               fin;
                       fin;
           fin;
    fin;
define-nueva-instruccion dejar3 como
    inicio
        oeste;
        mientras frente-libre hacer avanza;
        norte;
        avanza;
        si junto-a-zumbador entonces
            inicio
                mientras junto-a-zumbador y frente-libre hacer avanza;
                si frente-libre o (frente-bloqueado y no-junto-a-zumbador) entonces
                inicio
                sur;
                avanza;
                fin;
                este;
                avanza;
                mientras junto-a-zumbador hacer avanza;
                oeste;
                avanza;
                sur;
            fin;
        mientras algun-zumbador-en-la-mochila hacer
            inicio
                avanza;
                repetir 3 veces deja-zumbador;
            fin;
        si ningun-zumbador-en-la-mochila entonces
            inicio
                sur;
                mientras frente-libre hacer avanza;
                oeste;
                mientras frente-libre hacer avanza;
                este;
            fin;
    fin;
define-nueva-instruccion coger4 como
    inicio
       mientras frente-libre hacer
           inicio
               mientras no-junto-a-zumbador y frente-libre hacer avanza;
               si junto-a-zumbador entonces
                   inicio
                       repetir 4 veces coge-zumbador;

                   fin;
           fin;
    fin;
define-nueva-instruccion dejar4 como
    inicio
        oeste;
        mientras frente-libre hacer avanza;
        norte;
        avanza;
        si junto-a-zumbador entonces
            inicio
                mientras junto-a-zumbador y frente-libre hacer avanza;
                si frente-libre entonces
                    inicio
                        sur;
                        avanza;
                    fin;
                este;
                avanza;
                mientras junto-a-zumbador y frente-libre hacer avanza;
                si frente-libre entonces
                    inicio
                        oeste;
                        avanza;
                    fin;
                sur;
                mientras junto-a-zumbador y frente-libre hacer avanza;
                    norte;
                    avanza;
                    oeste;
            fin;
        mientras algun-zumbador-en-la-mochila hacer
            inicio
                avanza;
                repetir 4 veces deja-zumbador;
            fin;
        si ningun-zumbador-en-la-mochila entonces
            inicio
                si junto-a-zumbador entonces
                    inicio
                        este;
                        avanza;
                        si junto-a-zumbador entonces
                            inicio
                                repetir 2 veces gira-izquierda;
                                avanza;
                                apagate;
                            fin;
                    fin;
               sur;
               mientras frente-libre hacer avanza;
               oeste;
               mientras frente-libre hacer avanza;
               este;
            fin;
    fin;
    define-nueva-instruccion buscar como
        inicio
            norte;
            avanza;
            si junto-a-zumbador entonces
                inicio
                    mientras junto-a-zumbador y frente-libre hacer avanzA;
                    si frente-libre o (frente-bloqueado y no-junto-a-zumbador) entonces
                        inicio
                            sur;
                            avanza;
                        fin;
                    este;
                    avanza;
                    si junto-a-zumbador entonces
                        inicio
                            mientras junto-a-zumbador hacer avanza;
                            oeste;
                            avanza;
                            sur;
                            avanza;
                            si junto-a-zumbador entonces
                                inicio
                                   mientras junto-a-zumbador hacer avanza;
                                   norte;
                                   avanza;
                                fin sino
                                    inicio
                                        norte;
                                        avanza;
                                        apagate;
                                    fin;
                        fin ;
                        si junto-a-zumbador entonces
                            inicio
                                oeste;
                                avanza;
                                si junto-a-zumbador entonces
                                    inicio
                                        mientras junto-a-zumbador y frente-libre hacer avanza;
                                        este;
                                        avanza;
                                        si junto-a-zumbador entonces
                                            inicio
                                                apagate;
                                            fin;

                                    fin;
                            fin;
                fin;
        fin;

    inicia-ejecucion
        coger1;
        dejar1;
        coger2;
        dejar2;
        coger3;
        dejar3;
        coger4;
        dejar4;
        buscar;
        si no-junto-a-zumbador entonces
            inicio
            repetir 2 veces gira-izquierdA;
            avanza;
            apagate;
            fin;
        apagate;
    termina-ejecucion
finalizar-programa
