iniciar-programa
define-nueva-instruccion g(n) como repetir n veces gira-izquierda;
define-nueva-instruccion a(n)como repetir n veces avanza;
define-nueva-instruccion al como mientras frente-libre hacer a(1);

define-nueva-instruccion dz(n) como inicio
    si junto-a-zumbador entonces inicio
       coge-zumbador;
       dz(sucede(n));
       deja-zumbador;
    fin
    sino inicio
        repetir n veces deja-zumbador;
        repetir 8 veces si junto-a-zumbador entonces coge-zumbador;
        si no-junto-a-zumbador entonces deja-zumbador;
    fin;
fin;

define-nueva-instruccion esquina como inicio
    mientras no-orientado-al-sur hacer g(1);
    al;
    mientras no-orientado-al-oeste hacer g(1);
    al;
    g(2);
fin;


define-nueva-instruccion minas como inicio
    si frente-libre entonces inicio
        a(1);
        dz(0);
        g(1);
        si frente-libre entonces inicio
            a(1);
            dz(0);
            g(2);
            a(1);
            g(2);
        fin;
        g(2);
        si frente-libre entonces inicio
            a(1);
            dz(0);
            g(2);
            a(1);
            g(2);
        fin;
        g(3);
        a(1);
        g(2);
    fin;

    g(2);
    si frente-libre entonces inicio
        a(1);
        dz(0);
        g(1);
        si frente-libre entonces inicio
            a(1);
            dz(0);
            g(2);
            a(1);
            g(2);
        fin;
        g(2);
        si frente-libre entonces inicio
            a(1);
            dz(0);
            g(2);
            a(1);
            g(2);
        fin;
        g(3);
        a(1);
        g(2);
    fin;

    g(1);
    si frente-libre entonces inicio
        a(1);
        dz(0);
        g(2);
        a(1);
        g(2);
    fin;
    g(2);

    si frente-libre entonces inicio
        a(1);
        dz(0);
        g(2);
        a(1);
        g(2);
    fin;
    g(3);
fin;

define-nueva-instruccion evaluar(n) como inicio
    si junto-a-zumbador entonces inicio
       coge-zumbador;
       evaluar(sucede(n));
       deja-zumbador;
    fin
    sino inicio
        repetir n veces deja-zumbador;
        repetir 8 veces si junto-a-zumbador entonces coge-zumbador;
        si junto-a-zumbador entonces minas;
    fin;
fin;

define-nueva-instruccion recorrido como inicio
    mientras frente-libre hacer inicio
        evaluar(0);
        a(1);
    fin;
    evaluar(0);
    si izquierda-bloqueada entonces apagate;
    g(1);
    a(1);
    g(1);

    mientras frente-libre hacer inicio
        evaluar(0);
        a(1);
    fin;
    evaluar(0);
    si derecha-bloqueada entonces apagate;
    g(3);
    a(1);
    g(3);
fin;

    inicia-ejecucion
        esquina;

        mientras algun-zumbador-en-la-mochila hacer recorrido;

        apagate;
    termina-ejecucion
finalizar-programa
