iniciar-programa
define-nueva-instruccion a como avanza;
define-nueva-instruccion gi como gira-izquierda;
define-nueva-instruccion mv como repetir 2 veces gi;
define-nueva-instruccion gd como repetir 3 veces gi;
define-nueva-instruccion sa como mientras frente-libre hacer a;
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gi;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gi;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gi;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gi;
define-nueva-instruccion coger(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        coger(sucede(x));
    fin
    sino
    inicio
        mv;
        a;
        gi;
        mientras junto-a-zumbador hacer a;
        norte;
        a;
        repetir x veces si junto-a-zumbador entonces coge-zumbador;
        repetir x veces deja-zumbador;
        oeste;
        mientras junto-a-zumbador hacer a;
        repetir x veces deja-zumbador;
        sur;
        a;
        este;
        a;
    fin;
fin;
define-nueva-instruccion funcion(x) como
inicio
    si no si-es-cero (x) entonces
    inicio
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            funcion(precede(x));
        fin
        sino
        inicio
            repetir x veces deja-zumbador;
            norte;
        fin;
    fin;
fin;
define-nueva-instruccion dejar(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        dejar(precede(x));
    fin
    sino
    inicio
        repetir x veces deja-zumbador;
    fin;
fin;
define-nueva-instruccion subsecuencia(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        subsecuencia(sucede(x));
    fin
    sino
    inicio
        oeste;
        si frente-libre entonces
        inicio
            sa;
            mv;
            mientras junto-a-zumbador hacer
            inicio
                funcion(x);
                si orientado-al-norte entonces
                inicio
                    dejar(x);
                    a;
                    coger(0);
                fin
                sino
                inicio
                    repetir x veces deja-zumbador;
                    a;
                fin;
            fin;
            repetir x veces deja-zumbador;
            norte;
            a;
            deja-zumbador;
            mv;
            a;
            gi;
            a;
        fin
        sino
        inicio
            repetir x veces deja-zumbador;
            norte;
            a;
            deja-zumbador;
            mv;
            a;
            gi;
            a;
        fin;
    fin;
fin;
define-nueva-instruccion mayor (x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        mayor(sucede(x));
    fin
    sino
    inicio
        a;
        mientras frente-libre hacer
        inicio
            repetir x veces si junto-a-zumbador entonces coge-zumbador;
            repetir x veces deja-zumbador;
            mayor(0);
        fin;
        sur;
        a;
        mientras junto-a-zumbador hacer coge-zumbador;
        repetir x veces deja-zumbador;
        apagate;
    fin;
fin;
    inicia-ejecucion
    oeste;
    mientras junto-a-zumbador hacer
    subsecuencia(0);
    norte;
    a;
    oeste;
    a;
    mayor(0);
           apagate;
    termina-ejecucion
finalizar-programa

