iniciar-programa

define-nueva-instruccion gd como repetir 3 veces gira-izquierda;

define-nueva-instruccion md como repetir 2 veces gira-izquierda;

define-nueva-instruccion iz como  gira-izquierda;

define-nueva-instruccion pared como mientras frente-libre hacer avanza;

define-nueva-instruccion orien como inicio
     si orientado-al-oeste entonces md;
     si orientado-al-sur entonces iz;
     si orientado-al-norte entonces gd;
fin;
define-nueva-instruccion recu como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        recu;
        deja-zumbador;
    fin
    sino inicio
        avanza;
    fin;
fin;
define-nueva-instruccion final(n) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        avanza;
        si junto-a-zumbador entonces inicio
        coge-zumbador;
        fin
        sino inicio
            md;
            avanza;
            repetir n veces deja-zumbador;
            md;
            recu;
            deja-zumbador;
            apagate;

        fin;
        si frente-bloqueado entonces inicio
            md;
            avanza;
            md;
        fin;
        final(sucede(n));
    fin
    sino inicio
        avanza;
        repetir n veces deja-zumbador;
        apagate;
    fin;
fin;
define-nueva-instruccion sacar(n) como inicio
    si frente-libre entonces inicio
        avanza;
        sacar(sucede(n));
        sacar(n);
    fin
    sino inicio
        si no-junto-a-zumbador entonces inicio
        md;
        pared;
        iz;
        pared;
        repetir 2 veces repetir n veces deja-zumbador;
        fin;
    fin;
fin;
define-nueva-instruccion sacar2(n) como inicio
    si frente-libre entonces inicio
        avanza;
        sacar2(sucede(n));
        sacar2(n);
    fin
    sino inicio
        si no-junto-a-zumbador entonces inicio
        md;
        pared;
        iz;
        mientras no-junto-a-zumbador hacer avanza;
        md;
        avanza;
        repetir 3 veces repetir n veces deja-zumbador;
        md;
        final(0);
        fin;
    fin;
fin;

    inicia-ejecucion
        orien;
        mientras no-junto-a-zumbador hacer avanza;
        repetir 300 veces coge-zumbador;
        md;
        pared;
        gd;
        repetir 2 veces avanza;
        gd;
        mientras derecha-libre hacer avanza;
        sacar(1);
        md;
        repetir 5 veces avanza;
        gd;
        mientras derecha-libre hacer avanza;
        sacar2(1);

        apagate;
    termina-ejecucion
finalizar-programa
