iniciar-programa
define-nueva-instruccion a como avanza;
define-nueva-instruccion gd como repetir 3 veces gira-izquierda;
define-nueva-instruccion gi como gira-izquierda;
define-nueva-instruccion mv como repetir 2 veces gi;
define-nueva-instruccion perimetro(x) como
inicio
    si izquierda-libre y orientado-al-sur entonces
    inicio
        gi;
        a;
        perimetro(x);
    fin
    sino
    inicio
        si izquierda-bloqueada entonces
        inicio
            a;
            perimetro(sucede(x));
        fin
        sino
        inicio
            si orientado-al-norte entonces
            inicio
                mv;
                mientras frente-libre hacer a;
                gd;
                mientras frente-libre hacer a;
                mv;
                repetir 2 veces a;
                repetir 2 veces repetir x veces deja-zumbador;
                repetir 4 veces deja-zumbador;
                a;
                repetir 2 veces repetir x veces deja-zumbador;
                repetir 4 veces deja-zumbador;
            fin
            sino
            inicio
                gi;
                a;
                perimetro(x);
            fin;
        fin;
    fin;
fin;
define-nueva-instruccion quitar(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        repetir x veces coge-zumbador;
        gi;
        a;
        deja-zumbador;
        mv;
        a;
        gi;
        quitar(x);
    fin;
fin;
define-nueva-instruccion dividir(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        dividir(sucede(x));
    fin
    sino
    inicio mv; a; quitar(x); fin;
fin;
define-nueva-instruccion agarrardoce(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        agarrardoce(sucede(x));
    fin
    sino
    inicio
        mv;
        a;
        repetir x veces deja-zumbador;
        gi;
        a;
        repetir x veces coge-zumbador;
    fin;
fin;
    inicia-ejecucion
    gd;
    a;
    gi;
    a;
    mv;
    perimetro(0);
    mv;
    a;
    a;
    dividir(0);
    gi;
    a;
    agarrardoce(0);
        apagate;
    termina-ejecucion
finalizar-programa
