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 contar(n) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            contar(sucede(n));
        fin
        sino inicio
            gira-izquierda;
            avanza;
            repetir n veces deja-zumbador;
            gd;
            avanza;
        fin;
    fin;
    define-nueva-instruccion acofila(n) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            acofila(sucede(n));
        fin
        sino inicio
           mientras frente-libre y no-junto-a-zumbador hacer avanza;
           si junto-a-zumbador entonces inicio
               mv;
               avanza;
           fin
           sino mv;
           repetir n veces deja-zumbador;
           avanza;
           mientras frente-libre y no-junto-a-zumbador hacer avanza;
           mv;
        fin;
    fin;
    define-nueva-instruccion saca-gan como inicio
        si no-junto-a-zumbador entonces inicio
            gd;
            avanza;
            gira-izquierda;
            contar(0);
            saca-gan;
        fin
        sino inicio
            coge-zumbador;
            gd;
            avanza;
            gd;
        fin;
    fin;
    define-nueva-instruccion bus-gan(n) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            bus-gan(sucede(n));
        fin
        sino inicio
            mv;
            avanza;
            gira-izquierda;
            repetir precede(n) veces avanza;
            gira-izquierda;
            avanza;
            gira-izquierda;
            si no-junto-a-zumbador entonces inicio
                deja-zumbador;
            fin
            sino inicio
                avanza;
                deja-zumbador;
                mv;
                avanza;
                mv;
            fin;
            avanza;
            mientras no-junto-a-zumbador hacer avanza;
            mv;
        fin;
    fin;
    define-nueva-instruccion posic(n) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            posic(sucede(n));
        fin
        sino inicio
            mientras no-junto-a-zumbador hacer avanza;
            mv;
            repetir n veces avanza;
            mv;
        fin;
    fin;
    define-nueva-instruccion alfinal(n) como inicio
        si junto-a-zumbador entonces inicio
            coge-zumbador;
            alfinal(sucede(n));
        fin
        sino inicio
            gd;
            avanza;
            gira-izquierda;
            mientras frente-libre y junto-a-zumbador hacer avanza;
            mv;
            repetir n veces deja-zumbador;
            mientras frente-libre hacer avanza;
            gd;
            avanza;
            gd;
            mientras no-junto-a-zumbador y frente-libre hacer avanza;
        fin;
    fin;
    inicia-ejecucion
    mientras no-orientado-al-norte hacer gira-izquierda;
    avanza;
    bus-gan(0);
    posic(0);
    saca-gan;
    mientras junto-a-zumbador hacer acofila(0);
    mientras frente-libre hacer avanza;
    gd;
    avanza;
    gd;
    mientras no-junto-a-zumbador hacer avanza;
    mientras junto-a-zumbador hacer alfinal(0);
        apagate;
    termina-ejecucion
finalizar-programa
