iniciar-programa

define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;

    define-nueva-instruccion quita(z) como inicio
        si junto-a-zumbador y no si-es-cero(z) entonces inicio
            coge-zumbador;
            quita(precede(z));
            si orientado-al-oeste entonces deja-zumbador;
        fin sino inicio
            si no-junto-a-zumbador y no si-es-cero(z) entonces inicio
                oeste;
            fin;
        fin;
    fin;

    define-nueva-instruccion compara(x) como inicio
        si junto-a-zumbador y no-orientado-al-oeste entonces inicio
            este;
            quita(x);
            compara(x);
            si no-orientado-al-oeste entonces repetir x veces deja-zumbador;

            si orientado-al-oeste entonces este;

        fin sino inicio
            si no-orientado-al-oeste entonces inicio
                sur;
            fin;
        fin;
    fin;

    define-nueva-instruccion checa(w) como inicio

        si junto-a-zumbador y no si-es-cero(w) entonces inicio
            coge-zumbador;
            checa(precede(w));
            deja-zumbador;
        fin sino inicio
            si si-es-cero(w) entonces inicio
                sur;
            fin;
        fin;

    fin;

    define-nueva-instruccion busca(x) como inicio
        norte;
        checa(101);
        si orientado-al-sur entonces inicio
            sal-de-instruccion;
        fin;

        repetir 4 veces inicio
            si frente-bloqueado y izquierda-bloqueada y derecha-bloqueada entonces inicio
                repetir x veces deja-zumbador;
                apagate;
            fin;
            gira-izquierda;
        fin;

        si junto-a-zumbador entonces inicio
            norte;
            compara(x);
            si orientado-al-este entonces inicio
                sal-de-instruccion;
            fin;
        fin;

        repetir 101 veces deja-zumbador;


        este;
        si frente-libre entonces inicio
            avanza;
            busca(sucede(x));
            oeste;
            avanza;
        fin;

        sur;
        si frente-libre entonces inicio
            avanza;
            busca(sucede(x));
            norte;
            avanza;
        fin;

        norte;
        si frente-libre entonces inicio
            avanza;
            busca(sucede(x));
            sur;
            avanza;
        fin;

        oeste;
        si frente-libre entonces inicio
            avanza;
            busca(sucede(x));
            este;
            avanza;
        fin;

        repetir 101 veces coge-zumbador;

    fin;


    inicia-ejecucion
        busca(0);
        apagate;
    termina-ejecucion
finalizar-programa
