iniciar-programa
    DEFINE-NUEVA-INSTRUCCION NORTE COMO MIENTRAS NO ORIENTADO-AL-NORTE 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 SUR COMO MIENTRAS NO ORIENTADO-AL-SUR HACER GIRA-IZQUIERDA;

    DEFINE-NUEVA-INSTRUCCION media-vuelta como inicio
        gira-izquierdA;
        gira-izquierda;
    fin;

    define-nueva-instruccion marcar como inicio
        si orientado-al-oeste entonces inicio
            deja-zumbador;
        fin;
        si orientado-al-norte y frente-libre entonces inicio
            deja-zumbador;
            deja-zumbador;
        fin;
        si orientado-al-este entonces inicio
           repetir 3 veces inicio
               deja-zumbador;
           fin;
        fin;
    fin;

    define-nueva-instruccion  buscar como inicio
        norte;
        repetir 3 veces inicio
            si junto-a-zumbador entonces inicio
                gira-izquierda;
                si frente-libre entonces inicio
                    avanza;
                    si junto-a-zumbador entonces inicio
                        media-vuelta;
                        avanza;
                    fin;
                fin sino inicio
                    media-vuelta;
                fin;
            fin;
        fin;
    fin;

    define-nueva-instruccion regresa como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            si junto-a-zumbador entonces inicio
                coge-zumbador;
                si junto-a-zumbador entonces inicio
                    oeste;
                    avanza;
                fin sino inicio
                    deja-zumbador;
                    sur;
                    avanza;
                fin;
            fin sino inicio
                deja-zumbador;
                este;
                avanza;
            fin;
        fin;
    fin;

    define-nueva-instruccion final(n) como inicio
        si no si-es-cero(n) y junto-a-zumbador entonces inicio
            buscar;
            si no junto-a-zumbador entonces inicio
                marcar;
                final(precede(n));
            fin sino inicio
                regresa;
                final(sucede(n));
            fin;
        fin sino inicio
            si si-es-cero(n) y frente-libre o no orientado-al-norte entonces inicio
                regresa;
                final(sucede(n));
            fin;
        fin;
    fin;

    define-nueva-instruccion largo(n) como inicio
        si frente-libre entonces inicio
            avanza;
            largo(sucede(n));
        fin sino inicio
            oeste;
            mientras no junto-a-zumbador hacer inicio
                avanza;
            fin;
            norte;
            final(sucede(n));
        fin;
    fin;

    define-nueva-instruccion ir11 como inicio
        oeste;
        mientras frente-libre hacer inicio
            avanza;
        fin;
        este;
    fin;

    define-nueva-instruccion marca como inicio
        repetir 4 veces inicio
            deja-zumbador;
        fin;
        ir11;
    fin;

    define-nueva-instruccion recoger(n) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            recoger(sucede(n));
        fin sino inicio
            si si-es-cero(precede(precede(precede(n)))) entonces inicio
                oeste;
                avanza;
            fin;
            si si-es-cero(precede(precede(n))) entonces inicio
                sur;
                avanza;
            fin;
            si si-es-cero(precede(n)) entonces inicio
                este;
                avanza;
            fin;
            si junto-a-zumbador entonces inicio
                recoger(0);
            fin sino inicio
                oeste;
                mientras frente-libre hacer inicio
                    avanza;
                    mientras junto-a-zumbador hacer coge-zumbador;
                fin;
            fin;
            si no si-es-cero(n) y no si-es-cero(precede(precede(precede(precede(n))))) entonces inicio
                ir11;
                mientras junto-a-zumbador hacer inicio
                    avanza;
                fin;
                repetir n veces inicio
                    deja-zumbador;
                fin;
            fin;
        fin;
    fin;

    inicia-ejecucion
        marca;
        largo(0);
        deja-zumbador; deja-zumbador;
        recoger(0);
        apagate;
    termina-ejecucion
finalizar-programa
