iniciar-programa
    define-nueva-instruccion gd como repetir 3 veces gira-izquierda;
    define-nueva-instruccion mv como repetir 2 veces gira-izquierda;
    define-nueva-instruccion camb(n) como inicio
        repetir n veces inicio
            si junto-a-zumbador entonces inicio
                coge-zumbador;
            fin
            sino inicio
                gd;
                avanza;
                deja-zumbador;
                mv;
                avanza;
                gd;
                repetir precede(n) veces deja-zumbador;
            fin;
        fin;
            gd;
            avanza;
            si no-junto-a-zumbador entonces inicio
                mv;
                avanza;
                gd;
                avanza;
                deja-zumbador;
                mv;
                avanza;
                mv;
                si junto-a-zumbador entonces inicio
                    camb(n);
                fin
                sino inicio
                    avanza;
                    si junto-a-zumbador y frente-libre entonces camb(n)
                    sino inicio
                        mientras no-junto-a-zumbador y frente-libre hacer avanza;
                        si frente-bloqueado entonces apagate
                        sino camb(n);
                    fin;
                fin;
            fin
            sino inicio
                coge-zumbador;
                mv;
                avanza;
                gd;
                avanza;
                si junto-a-zumbador y frente-libre entonces camb(n)
                sino inicio
                    mientras no-junto-a-zumbador y frente-libre hacer avanza;
                    si frente-bloqueado entonces apagate
                    sino camb(n)
                fin;
            fin;
    fin;
    define-nueva-instruccion suma(n) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            suma(sucede(n));
        fin
        sino inicio
            gd;
            avanza;
            si junto-a-zumbador entonces inicio
                gira-izquierda;
                suma(n);
            fin
            sino inicio
                mv;
                mientras frente-libre hacer avanza;
                repetir n veces deja-zumbador;
                gd;
                avanza;
                gd;
                avanza;
                gira-izquierda;
            fin;
        fin;
    fin;
    define-nueva-instruccion base(n) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            base(sucede(n));
        fin
        sino inicio
            repetir n veces deja-zumbador;
            mv;
            mientras frente-libre hacer avanza;
            gira-izquierda;
            repetir 11 veces avanza;
            mv;
            camb(n);
        fin;
    fin;
    inicia-ejecucion
    gd;
    repetir 11 veces avanza;
    gira-izquierda;
    avanza;
    gira-izquierda;
    repetir 11 veces suma(0);
    gd;
    repetir 2 veces avanza;
    base(0);
        apagate;
    termina-ejecucion
finalizar-programa
