iniciar-programa
    define-nueva-instruccion g(x) como inicio
        repetir x veces gira-izquierda;
    fin;
    define-nueva-instruccion fla como inicio
        mientras frente-libre hacer avanza;
    fin;
    define-nueva-instruccion a(x) como inicio
        si no (si-es-cero (x)) entonces inicio
            si frente-libre entonces inicio
                avanza; a(precede(x));
            fin
            sino inicio
                si orientado-al-oeste y derecha-libre entonces inicio
                    g(3); avanza; g(3); a(precede(x));
                fin;
                si orientado-al-oeste y derecha-bloqueada entonces inicio
                    g(1); fla; g(1); fla; g(2); a(precede(x));
                fin;
                si orientado-al-este y izquierda-libre entonces inicio
                    g(1); avanza; g(1); a(precede(x));
                fin;
                si orientado-al-este y izquierda-bloqueada entonces inicio
                    g(3); fla; g(2); avanza; g(1); a(precede(x));
                fin;
            fin;
        fin
        sino inicio
            si si-es-cero (x) entonces inicio
                apagate;
            fin;
        fin;
    fin;
    define-nueva-instruccion x(x) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador; x(sucede(x));
        fin
        sino inicio
            g(1); avanza; g(1);
            a(x);
        fin;
    fin;
    inicia-ejecucion
        mientras no-orientado-al-oeste hacer g(1);
        fla;
        repetir 100 veces coge-zumbador;
        g(2);
        fla; g(2); avanza;
        mientras junto-a-zumbador hacer inicio
            coge-zumbador; g(2); avanza;
            repetir 10 veces deja-zumbador;
            g(2); avanza;
        fin;
        g(2); avanza; coge-zumbador;
        x(0);
        apagate;
    termina-ejecucion
finalizar-programa
