iniciar-programa
define-nueva-instruccion contaruno(a) como inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        contaruno(sucede(a));
    fin;
    si no-junto-a-zumbador entonces
    inicio
        mientras frente-libre hacer
        avanza;
        repetir a veces
        deja-zumbador;
    fin;
fin;
define-nueva-instruccion contardos(b) como inicio
         si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        contardos(sucede(b));
    fin;
    si no-junto-a-zumbador entonces
    inicio
        gira-izquierda;
        gira-izquierda;
        mientras frente-libre hacer
        avanza;
        gira-izquierda;
        mientras frente-libre hacer
        avanza;
        repetir b veces
        deja-zumbador;
        apagate;
    fin;

fin;

define-nueva-instruccion cam(g) como inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        cam(sucede(g));
    fin;
    si no-junto-a-zumbador entonces
    inicio
        avanza;
        avanza;
        repetir g veces
        deja-zumbador;
        gira-izquierda;
        gira-izquierda;
        avanza;
        gira-izquierda;
        gira-izquierda;
    fin;
fin;
define-nueva-instruccion mayor como inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        avanza;
            si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                gira-izquierda;
                avanza;
                deja-zumbador;
                gira-izquierda;
                avanza;
                deja-zumbador;
                gira-izquierda;
                avanza;
                gira-izquierda;
            fin;
            si no-junto-a-zumbador entonces
            inicio
                gira-izquierda;
                gira-izquierda;
                avanza;
                deja-zumbador;
                contaruno(0);
                repetir 3 veces
                gira-izquierda;
                avanza;
                repetir 3 veces
                gira-izquierda;
                avanza;
                contardos(0);
            fin;
    fin;

    si no-junto-a-zumbador entonces
    inicio
    avanza;
    gira-izquierda;
    gira-izquierda;
    contaruno(0);
    repetir 3 veces
    gira-izquierda;
    avanza;
    repetir 3 veces
    gira-izquierda;
    avanza;
    avanza;
    contardos(0);
    fin;
fin;


define-nueva-instruccion conteod(s) como inicio
    si frente-libre entonces
    inicio
        avanza;
        conteod(sucede(s));
    fin;
    si frente-bloqueado y izquierda-libre y orientado-al-este entonces
    inicio
    gira-izquierda;
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    gira-izquierda;
    conteod(sucede(s));
    fin;
    si frente-bloqueado y izquierda-bloqueada y orientado-al-este entonces
    inicio
    gira-izquierda;
    conteod(sucede(s));
    fin;
    si frente-bloqueado y derecha-bloqueada y orientado-al-norte entonces
    inicio
    gira-izquierda;
    mientras  frente-libre hacer
    avanza;
    gira-izquierda;
    mientras derecha-bloqueada hacer
    avanza;
    repetir 3 veces
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    avanza;
    repetir s veces
    deja-zumbador;
    gira-izquierda;
    avanza;
    fin;
fin;

define-nueva-instruccion conteo(r) como inicio
    si frente-libre entonces
    inicio
        avanza;
        conteo(sucede(r));
    fin;
    si frente-bloqueado y izquierda-libre y orientado-al-este entonces
    inicio
    gira-izquierda;
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    gira-izquierda;
    conteo(sucede(r));
    fin;
    si frente-bloqueado y izquierda-bloqueada y orientado-al-este entonces
    inicio
    gira-izquierda;
    conteo(sucede(r));
    fin;
    si frente-bloqueado y derecha-bloqueada y orientado-al-norte entonces
    inicio
    gira-izquierda;
    mientras  frente-libre hacer
    avanza;
    gira-izquierda;
    mientras derecha-bloqueada hacer
    avanza;
    repetir 3 veces
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    repetir r veces
    deja-zumbador;
    gira-izquierda;
    avanza;
    gira-izquierda;
    avanza;
    fin;
fin;


define-nueva-instruccion allardos como inicio
    mientras izquierda-libre y frente-libre hacer
    avanza;
    si izquierda-bloqueada entonces
    inicio
    mientras izquierda-bloqueada hacer
    avanza;
    gira-izquierda;
    avanza;
    mientras izquierda-bloqueada hacer
    avanza;
    gira-izquierda;
    avanza;
    conteod(0);
    gira-izquierda;
    avanza;
    gira-izquierda;
    avanza;
    gira-izquierda;
    cam(0);
    mientras frente-libre o frente-bloqueado hacer
    mayor;
    fin;
    si frente-bloqueado y izquierda-libre entonces
    inicio
    gira-izquierda;
    avanza;
    gira-izquierda;
    fin;
    mientras frente-libre y derecha-libre hacer
    avanza;
    si derecha-bloqueada entonces
    inicio
        gira-izquierda;
        gira-izquierda;
        avanza;
        gira-izquierda;
        avanza;
        mientras izquierda-bloqueada hacer
        avanza;
        gira-izquierda;
        avanza;
        conteod(0);
        gira-izquierda;
avanza;
gira-izquierda;
avanza;
gira-izquierda;
cam(0);
mientras frente-libre o frente-bloqueado hacer
        mayor;
    fin;
    si frente-bloqueado y derecha-libre entonces
    inicio
        repetir 3 veces
        gira-izquierda;
        avanza;
        repetir 3 veces
        gira-izquierda;
    fin;
fin;





define-nueva-instruccion allaruno como inicio
    mientras izquierda-libre y frente-libre hacer
    avanza;
    si izquierda-bloqueada entonces
    inicio
    gira-izquierda;
    gira-izquierda;
    avanza;
    repetir 3 veces
    gira-izquierda;
    avanza;
    mientras derecha-bloqueada hacer
    avanza;
    repetir 3 veces
    gira-izquierda;
    avanza;
    conteo(0);
     gira-izquierda;
     avanza;
     repetir 3 veces
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    repetir 3 veces
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    gira-izquierda;
    mientras frente-libre o frente-bloqueado hacer
    allardos;
    fin;
    si frente-bloqueado y izquierda-libre entonces
    inicio
    gira-izquierda;
    avanza;
    gira-izquierda;
    fin;
    mientras frente-libre y derecha-libre hacer
    avanza;
    si derecha-bloqueada entonces
    inicio
        mientras derecha-bloqueada hacer
        avanza;
        repetir 3 veces
        gira-izquierda;
        avanza;
        repetir 3 veces
        gira-izquierda;
        avanza;
        conteo(0);
         gira-izquierda;
     avanza;
     repetir 3 veces
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    repetir 3 veces
    gira-izquierda;
    mientras frente-libre hacer
    avanza;
    gira-izquierda;
    gira-izquierda;
    mientras frente-libre o frente-bloqueado hacer
        allardos;
    fin;
    si frente-bloqueado y derecha-libre entonces
    inicio
        repetir 3 veces
        gira-izquierda;
        avanza;
        repetir 3 veces
        gira-izquierda;
    fin;
fin;

    inicia-ejecucion
    mientras no-orientado-al-este hacer
    gira-izquierda;
    repetir 4 veces
    avanza;
    repetir 250 veces
    coge-zumbador;
    mientras frente-bloqueado o frente-libre hacer
    allaruno;

        apagate;
    termina-ejecucion
finalizar-programa
