iniciar-programa
define-nueva-instruccion llevi(v) como inicio
     si junto-a-zumbador entonces
     inicio
     coge-zumbador;
     llevi(sucede(v));
     fin;
     si no-junto-a-zumbador entonces
     inicio
         mientras no-orientado-al-oeste hacer
         gira-izquierda;
         mientras frente-libre hacer
         avanza;
         gira-izquierda;
         gira-izquierda;
         repetir 4 veces
         avanza;
         gira-izquierda;
         repetir 3 veces
         avanza;
         gira-izquierda;
         avanza;
         repetir v veces
         deja-zumbador;
         coge-zumbador;
         apagate;
     fin;
fin;

define-nueva-instruccion llev(u) como inicio
     si junto-a-zumbador entonces
     inicio
     coge-zumbador;
     llev(sucede(u));
     fin;
     si no-junto-a-zumbador entonces
     inicio
         gira-izquierda;
         avanza;
         gira-izquierda;
         repetir 3 veces
         avanza;
         gira-izquierda;
         avanza;
         repetir u veces
         deja-zumbador;
         coge-zumbador;
         apagate;
     fin;
fin;

define-nueva-instruccion recoje(q) como inicio
    si junto-a-zumbador entonces
    inicio
    coge-zumbador;
    avanza;
    recoje(sucede(q));
    fin;
    si no-junto-a-zumbador entonces
    inicio
        mientras no-orientado-al-oeste hacer
        gira-izquierda;
        mientras frente-libre hacer
        avanza;
        gira-izquierda;
        gira-izquierda;
        repetir 3 veces
        avanza;
        gira-izquierda;
        avanza;
        repetir q veces
        deja-zumbador;
        gira-izquierda;
        gira-izquierda;
        mientras frente-libre hacer
        avanza;
        llev(0);
    fin;
fin;



define-nueva-instruccion res(w) como inicio

    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        res(sucede(w));
    fin;
    si no-junto-a-zumbador entonces
    inicio
        repetir 3 veces
        gira-izquierda;
        repetir 3 veces
        avanza;
        gira-izquierda;
        avanza;
        repetir w veces
        deja-zumbador;
        coge-zumbador;
        apagate;

    fin;
fin;
define-nueva-instruccion cojje(k) como inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        cojje(sucede(k));
    fin;
    si no-junto-a-zumbador entonces
    inicio
        gira-izquierda;
        mientras frente-libre hacer
        avanza;
        repetir 3 veces
        gira-izquierda;
        avanza;
        gira-izquierda;
        gira-izquierda;
        avanza;
        repetir k veces
        inicio
            si junto-a-zumbador entonces
            inicio
            deja-zumbador;
            avanza;
            fin;
            si no-junto-a-zumbador entonces
            inicio
            gira-izquierda;
            gira-izquierda;
            avanza;
            fin;
        fin;
       gira-izquierda;
       gira-izquierda;
       avanza;
       si no-junto-a-zumbador entonces
       inicio
           gira-izquierda;
           gira-izquierda;
           avanza;
           llevi(0);
       fin;
        si junto-a-zumbador entonces
        inicio
            recoje(0);
            llev(0);
        fin;
    fin;
fin;
define-nueva-instruccion final como inicio
     gira-izquierda;
     repetir 2 veces
     avanza;
     gira-izquierda;
     mientras frente-libre hacer
     avanza;
     si no-junto-a-zumbador entonces
     apagate;
     cojje(0);
     res(0);
fin;

define-nueva-instruccion coje(g) como inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        coje(sucede(g));
    fin;
    si no-junto-a-zumbador entonces
    inicio
        gira-izquierda;
        gira-izquierda;
        mientras frente-libre hacer
        avanza;
        gira-izquierda;
        avanza;
        repetir g veces
        inicio
        deja-zumbador;
        avanza;
        fin;
        final;
    fin;
fin;

define-nueva-instruccion divide como inicio
    repetir 3 veces
    gira-izquierda;
    repetir 2 veces
    avanza;
    gira-izquierda;
    avanza;
    coje(0);
fin;

define-nueva-instruccion lleva-multi(l) como inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        lleva-multi(sucede(l));
    fin;
    si no-junto-a-zumbador entonces
    inicio

        repetir 3 veces
        gira-izquierda;
        avanza;
        repetir 3 veces
        gira-izquierda;
        mientras frente-libre hacer
        avanza;
        repetir 3 veces
        gira-izquierda;
        avanza;
        repetir 3 veces
        gira-izquierda;
        mientras frente-libre hacer
        avanza;
        repetir l veces
        deja-zumbador;
        divide;
    fin;

fin;

define-nueva-instruccion conteo(t) como inicio
     si junto-a-zumbador entonces
     inicio
         coge-zumbador;
         conteo(sucede(t));
     fin;
     si no-junto-a-zumbador entonces
     inicio
         gira-izquierda;
         gira-izquierda;
         repetir t veces
         deja-zumbador;
         avanza;
         avanza;
         repetir t veces
         deja-zumbador;
         gira-izquierda;
         gira-izquierda;
         avanza;
         si no-junto-a-zumbador entonces
         inicio
                 gira-izquierda;
        gira-izquierda;
        avanza;
         lleva-multi(0);
         fin;
     fin;
fin;

define-nueva-instruccion multiplica como inicio
    avanza;
    mientras frente-libre o frente-bloqueado hacer
    inicio
    si no-junto-a-zumbador entonces
    inicio
    gira-izquierda;
    avanza;
    repetir 3 veces
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    repetir 3 veces
    gira-izquierda;
    avanza;
    repetir 3 veces
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    divide;
    fin;
    si junto-a-zumbador entonces
    inicio
    coge-zumbador;
    avanza;

    conteo(0);
    fin;
    fin;
fin;

    inicia-ejecucion
    avanza;
    gira-izquierda;
    repetir 4 veces
    avanza;
    gira-izquierda;
    avanza;
    gira-izquierda;
    multiplica;
        apagate;
    termina-ejecucion
finalizar-programa
