iniciar-programa
define-nueva-instruccion gira(q) como repetir q veces gira-izquierda;

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

define-nueva-instruccion ordena(tam) como inicio
        repetir tam veces inicio
            compara;
            avanza;
        fin;
        gira(2);
        mientras junto-a-zumbador y frente-libre hacer avanza;
        gira(2);
        si no junto-a-zumbador entonces avanza;
fin;

define-nueva-instruccion mide(x) como inicio
    si junto-a-zumbador entonces inicio
        avanza;
        mide(sucede(x));
    fin sino inicio
        gira(2);
        mientras frente-libre hacer avanza;
        gira(2);
    fin;
    ordena(x);
fin;

define-nueva-instruccion pasa(c) como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        pasa(sucede(c));
    fin sino inicio
        repetir c veces deja-zumbador;
        gira(1);
        avanza;
        gira(1);
        mientras frente-libre hacer avanza;
        repetir c veces deja-zumbador;
        gira(1);
        avanza;
        gira(1);
        mientras no junto-a-zumbador hacer avanza;
    fin;
fin;

define-nueva-instruccion suma como inicio
    mientras junto-a-zumbador hacer inicio
        coge-zumbador;
        avanza;
        deja-zumbador;
        gira(2);
        avanza;
        gira(2);
    fin;
    avanza;
    pasa(0);
fin;

define-nueva-instruccion largo(x) como inicio
    si junto-a-zumbador entonces inicio
        avanza;
        largo(sucede(x));
        suma;
        ordena(x);
    fin sino inicio
        gira(2);
        mientras frente-libre hacer avanza;
        gira(2);
    fin;
fin;
    inicia-ejecucion
    avanza;
    mide(0);
    avanza;
    largo(0);
        apagate;
    termina-ejecucion
finalizar-programa
