iniciar-programa
define-nueva-instruccion mueve(w) como
inicio
        si junto-a-zumbador entonces
        inicio
                coge-zumbador;
                mueve(w);
                deja-zumbador;
        fin
        sino
        inicio
                repetir w veces
                    avanza;
        fin;


fin;
define-nueva-instruccion ve como
inicio
        si junto-a-zumbador entonces
        inicio
                coge-zumbador;
                ve;
                avanza;
        fin
        sino
        inicio
                avanza;
                gira-izquierda;
        fin;
fin;
define-nueva-instruccion cuantos(x) como
inicio
        si junto-a-zumbador entonces
        inicio
                coge-zumbador;
                cuantos(sucede(x));
        fin
        sino
        inicio
                avanza;
                gira-izquierda;
                coge-zumbador;
                ve;
                repetir 2 veces
                    gira-izquierda;
                repetir x veces
                    avanza;
                repetir 2 veces
                    gira-izquierda;
                repetir x veces
                inicio
                        gira-izquierda;
                        mueve(1);
                        repetir 2 veces
                            gira-izquierda;
                        avanza;
                        gira-izquierda;
                        avanza;
                fin;
                mientras junto-a-zumbador hacer
                inicio
                        repetir 2 veces
                        gira-izquierda;
                        mueve(x);
                        repetir 2 veces
                        gira-izquierda;
                        repetir x veces
                            avanza;
                        si frente-libre entonces avanza;
                fin;
        fin;
fin;
define-nueva-instruccion ir(h) como
inicio
        si junto-a-zumbador entonces
        inicio
                avanza;
                ir(h);
                avanza;
        fin
        sino
        inicio
                repetir h veces deja-zumbador;
                repetir 2 veces gira-izquierda;
        fin;
fin;
define-nueva-instruccion copia(f) como
inicio
        si junto-a-zumbador entonces
        inicio
               coge-zumbador;
               copia(sucede(f));
        fin
        sino
        inicio
                repetir 3 veces gira-izquierda;
                avanza;
                gira-izquierda;
                ir(f);
                repetir 3 veces gira-izquierda;
                avanza;
                repetir 3 veces gira-izquierda;

        fin;
fin;
    inicia-ejecucion
        mientras no-orientado-al-norte hacer
            gira-izquierda;
        avanza;
        repetir 3 veces
            gira-izquierda;
        avanza;
        repetir 2 veces
            gira-izquierda;
        cuantos(0);
        repetir 2 veces gira-izquierda;
        mientras frente-libre hacer avanza;
        repetir 3 veces
        gira-izquierda;
        avanza;
        repetir 3 veces
        gira-izquierda;
        mientras no-junto-a-zumbador hacer avanza;
        mientras junto-a-zumbador hacer
        inicio
                copia(0);
                si frente-libre entonces
                avanza;
        fin;
        apagate;
    termina-ejecucion
finalizar-programa
