iniciar-programa
define-nueva-instruccion gira(x) como inicio
    repetir x veces
        gira-izquierda;
fin;

define-nueva-instruccion copia como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        copia;
        deja-zumbador;
        avanza;
        deja-zumbador;
        gira(2);
        avanza;
        gira(2);
    fin;
fin;

define-nueva-instruccion copia2 como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        copia2;
        deja-zumbador;
    fin
    sino inicio
        repetir 2 veces avanza;
    fin;
fin;

define-nueva-instruccion multiplica2 como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        multiplica2;
        deja-zumbador;
        avanza;
        deja-zumbador;
        gira(2);
        avanza;
        gira(2);
    fin;

fin;

define-nueva-instruccion multiplica como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        multiplica;
        multiplica2;
    fin
    sino inicio
        avanza;
        gira(2);
    fin;
fin;

define-nueva-instruccion resta como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        resta;
        deja-zumbador;
        avanza;
        coge-zumbador;
        gira(2);
        avanza;
        gira(2);
    fin
    sino inicio
    fin;
fin;

define-nueva-instruccion acomoda como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        acomoda;
        deja-zumbador;
        repetir 2 veces avanza;
        deja-zumbador;
        gira(2);
        repetir 2 veces avanza;
        gira(2);
    fin
    sino inicio
    fin;
fin;

define-nueva-instruccion acomoda2 como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        acomoda2;
        deja-zumbador;
    fin
    sino inicio
        avanza;
    fin;
fin;

define-nueva-instruccion fact(x) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        fact(sucede(x));
    fin
    sino inicio
        repetir 2 veces avanza;
        gira(3);
        avanza;
        gira(2);
        repetir x veces inicio
            coge-zumbador;
            avanza;
            gira(2);
            multiplica;
        fin;
    fin;
fin;

    inicia-ejecucion
        avanza;
        resta;
        avanza;
        gira(2);
        acomoda;
        avanza;
        gira(2);
        acomoda2;
        gira(3);
        copia;
        gira(3);
        repetir 2 veces avanza;
        gira(2);
        coge-zumbador;
        fact(0);
        avanza;
        gira(1);
        copia2;
        apagate;
    termina-ejecucion
finalizar-programa
