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

    define-nueva-instruccion villas(x) como inicio
        si frente-libre entonces inicio
            si no-junto-a-zumbador entonces inicio
                si orientado-al-oeste y derecha-libre y no-junto-a-zumbador entonces sal-de-instruccion;
                si derecha-libre entonces gira(3);
                avanza;
                villas(x);
            fin sino inicio
                coge-zumbador;
                si derecha-libre entonces gira(3);
                avanza;
                villas(sucede(x));
            fin;
        fin sino inicio
        fin;
        si si-es-cero(x) entonces inicio
            gira(1);
            avanza;
            gira(1);
            avanza;
            gira(3);
            deja-zumbador;
            apagate;
        fin sino inicio
            gira(1);
            avanza;
            gira(1);
            repetir 2 veces avanza;
            gira(3);
            repetir x veces deja-zumbador;
            si junto-a-zumbador entonces deja-zumbador;
        fin;
        apagate;
    fin;

    define-nueva-instruccion uno(x) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            si junto-a-zumbador entonces inicio
                si derecha-libre entonces gira(3);
                avanza;
                uno(x);
            fin sino inicio
                si derecha-libre y orientado-al-oeste y no-junto-a-zumbador entonces sal-de-instruccion;
                si derecha-libre entonces gira(3);
                avanza;
                uno(sucede(x));
            fin;
        fin sino inicio
            gira(1);
            avanza;
            gira(1);
            avanza;
            gira(3);
            avanza;
            repetir x veces deja-zumbador;
        fin;
        gira(1);
        avanza;
        gira(1);
        avanza;
        gira(3);
        repetir x veces deja-zumbador;
        gira(3);
        avanza;
        gira(3);
        repetir 2 veces avanza;
        villas(0);
    fin;


    define-nueva-instruccion vallas como inicio
        avanza;
        mientras frente-libre hacer inicio
            si derecha-libre y orientado-al-oeste y junto-a-zumbador entonces sal-de-instruccion;
            si junto-a-zumbador entonces inicio
                si derecha-libre entonces gira(3);
                avanza;
            fin sino inicio
                repetir 2 veces deja-zumbador;
                si derecha-libre entonces gira(3);
                avanza;
            fin;
        fin;
    fin;

    define-nueva-instruccion distancia(x) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            distancia(sucede(x));
        fin sino inicio
            avanza;
            deja-zumbador;
            mientras junto-a-zumbador hacer inicio
                repetir x veces inicio
                    avanza;
                    si derecha-libre entonces gira(3);
                fin;
                si junto-a-zumbador entonces sal-de-instruccion;
                si no-junto-a-zumbador entonces deja-zumbador;
            fin;
        fin;
    fin;

    inicia-ejecucion
        gira(3);
        avanza;
        gira(1);
        distancia(0);
        vallas;
        gira(3);
        avanza;
        uno(1);

        apagate;
    termina-ejecucion
finalizar-programa
