iniciar-programa
define-nueva-instruccion norte como mientras no-orientado-al-norte hacer gira-izquierda;
define-nueva-instruccion este como mientras no-orientado-al-este hacer gira-izquierda;
define-nueva-instruccion oeste como mientras no-orientado-al-oeste hacer gira-izquierda;
define-nueva-instruccion sur como mientras no-orientado-al-sur hacer gira-izquierda;

define-nueva-instruccion ir1-1 como
    inicio
        oeste;
        mientras frente-libre hacer avanza;
        sur;
        mientras frente-libre hacer avanza;
    fin;

define-nueva-instruccion coge-deja(z) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                coge-deja(sucede(z));
            fin
            sino
                inicio
                    norte;
                    avanza;
                    este;
                    mientras frente-libre hacer avanzA;
                    oeste;
                    mientras junto-a-zumbador hacer avanza;
                    repetir z veces deja-zumbador;
                fin;
    fin;

define-nueva-instruccion quita(x) como
    inicio
        mientras junto-a-zumbador hacer
            inicio
                coge-zumbador;
                ir1-1;
                este;
                repetir x veces avanza;
                oeste;
                avanza;
                avanza;
                mientras no-junto-a-zumbador hacer avanza;
                coge-deja(0);
                ir1-1;
                norte;
                avanza;
                este;
                avanza;
            fin;
    fin;

define-nueva-instruccion cuenta(x) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                cuenta(sucede(x));
            fin
            sino
                inicio
                    repetir x veces deja-zumbador;
                    este;
                    avanza;
                    quita(x);
                fin;
    fin;

define-nueva-instruccion lleva(x) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                lleva(sucede(x));
            fin
            sino
                inicio
                    ir1-1;
                    este;
                    mientras junto-a-zumbador hacer avanza;
                    repetir x veces deja-zumbador;
                fin;
    fin;

define-nueva-instruccion acomoda(x) como
    inicio
        si junto-a-zumbador entonces
            inicio
                mientras junto-a-zumbador hacer avanza;
                mientras no-junto-a-zumbador y frente-libre hacer avanza;
                si junto-a-zumbador entonces lleva(0)
                sino sal-de-instruccion;
                acomoda(0);
            fin
            sino
                inicio
                    mientras no-junto-a-zumbador y frente-libre hacer avanza;
                    si junto-a-zumbador entonces lleva(0)
                    sino sal-de-instruccion;
                    acomoda(0);
                fin;
    fin;

define-nueva-instruccion lleva1(x) como
    inicio
        si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                lleva1(sucede(x));
            fin
            sino
                inicio
                    ir1-1;
                    este;
                    mientras junto-a-zumbador hacer avanza;
                    repetir x veces deja-zumbador;
                fin;
    fin;

define-nueva-instruccion acomoda1(x) como
    inicio
        si junto-a-zumbador entonces
            inicio
                mientras junto-a-zumbador hacer avanza;
                mientras no-junto-a-zumbador y frente-libre hacer avanza;
                si junto-a-zumbador entonces lleva1(0)
                sino sal-de-instruccion;
                ir1-1;
                norte;
                avanza;
                este;
                acomoda1(0);
            fin
            sino
                inicio
                    mientras no-junto-a-zumbador y frente-libre hacer avanza;
                    si junto-a-zumbador entonces lleva1(0)
                    sino sal-de-instruccion;
                    ir1-1;
                norte;
                avanza;
                este;
                    acomoda(0);
                fin;
    fin;


    inicia-ejecucion
        norte;
        avanza;
        cuenta(0);
        ir1-1;
        este;
        acomoda(0);
        ir1-1;
        norte;
        avanza;
        este;
        acomoda1(0);
        apagate;
    termina-ejecucion
finalizar-programa
