iniciar-programa

define-nueva-instruccion gira(g) como inicio
repetir g veces gira-izquierda;
fin;

define-nueva-instruccion ruta como inicio
si frente-libre entonces inicio
avanza;
    si no-junto-a-zumbador entonces inicio
    gira(2);
    avanza;
    gira(3);
        si frente-libre entonces inicio
        avanza;

            si no-junto-a-zumbador entonces inicio
            gira(2);
            avanza;
                si frente-libre entonces inicio
                avanza;
                    si no-junto-a-zumbador entonces inicio
                    gira(2);
                    avanza;
                    mientras no-orientado-al-este hacer gira-izquierda;
                    mientras junto-a-zumbador hacer coge-zumbador;
                    fin;
                fin sino inicio
                gira(1);
                mientras junto-a-zumbador hacer coge-zumbador;
                fin;
            fin;

        fin sino inicio
        gira(2);

            si frente-libre entonces inicio
            avanza;
                si no-junto-a-zumbador entonces inicio
                gira(2);
                avanza;
                mientras no-orientado-al-este hacer gira-izquierda;
                mientras junto-a-zumbador hacer coge-zumbador;
                fin;
            fin sino inicio
            mientras junto-a-zumbador hacer coge-zumbador;
            mientras no-orientado-al-este hacer gira-izquierda;
            fin;

        fin;
    fin;
fin sino inicio
gira(1);
    si frente-libre entonces inicio
    avanza;
        si no-junto-a-zumbador entonces inicio
        gira(2);
        avanza;
            si frente-libre entonces inicio
            avanza;
                si no-junto-a-zumbador entonces inicio
                gira(2);
                avanza;
                gira(3);
                mientras junto-a-zumbador hacer coge-zumbador;
                fin;
            fin sino inicio
            gira(1);
            mientras junto-a-zumbador hacer coge-zumbador;
            fin;
        fin;
    fin sino inicio
    gira(2);
        si frente-libre entonces inicio
        avanza;
            si no-junto-a-zumbador entonces inicio
            gira(2);
            avanza;
            mientras junto-a-zumbador hacer coge-zumbador;
            fin;
        fin sino inicio
        gira(2);
        mientras junto-a-zumbador hacer coge-zumbador;
        fin;
    fin;

fin;
fin;

define-nueva-instruccion sobra(k) como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;

        si junto-a-zumbador entonces inicio
        ruta;
        sobra(sucede(k));
        fin sino inicio
        deja-zumbador;
        ruta;
        sobra(k);
        fin;

    fin sino inicio
    mientras junto-a-zumbador hacer coge-zumbador;
    repetir k veces deja-zumbador;
    apagate;
    fin;

fin;

define-nueva-instruccion omis(n) como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;

        si junto-a-zumbador entonces inicio
        ruta;
            si no si-es-cero(n) entonces inicio
            omis(precede(n));
            fin sino inicio
            sobra(1);
            fin;
        fin sino inicio
        deja-zumbador;
        ruta;
        omis(n);
        fin;

    fin sino inicio
    mientras no orientado-al-este hacer gira-izquierda;
    avanza;
    mientras junto-a-zumbador hacer coge-zumbador;
    repetir 5 veces deja-zumbador;
    apagate;
    fin;

fin;

define-nueva-instruccion capacidad(n) como inicio
    si junto-a-zumbador entonces inicio
    coge-zumbador;
    capacidad(sucede(n));
    fin sino inicio
    avanza;
    omis(n);
    fin;
fin;

    inicia-ejecucion

    capacidad(0);

        apagate;
    termina-ejecucion
finalizar-programa
