iniciar-programa
    (*gd esta instruccion hace girar a la derecha a la flecha*)
    define-nueva-instruccion gd como
        inicio
           repetir 3 veces
               gira-izquierda;
        fin;
    (*u esta instruccion hace dar media vuelta a la flecha*)
    define-nueva-instruccion u como
    inicio
        repetir 2 veces
        gira-izquierda;
    fin;
    (*ahz(avanza-hasta-zumbador) esta instruccion avanza hasta que encuentre
    a un zumbador*)
    define-nueva-instruccion ahz como
        inicio
            mientras no-junto-a-zumbador hacer
               avanza;

        fin;
    (*cz-snt(cogezumbador-sinotraes) esta instruccion permite tomar todos
    los zumbadores de un lugar, siempre y cuando no tengas un zumbador
    en la mochila*)
    define-nueva-instruccion cz-snt como
        inicio
            si ningun-zumbador-en-la-mochila entonces
                inicio
                    mientras junto-a-zumbador hacer
                    coge-zumbador;
                fin;

        fin;
    (*av-yd-una(avanza-ydeja-una) esta instruccion permite ir directamente
    al otro lado de la pared y dejar los zumbadores en la primer pocision
    a lado de la pared. solo si la flecha esta en el lado izquierdo apuntando
    hacia el este y abajo de lo alto de la pared.(se recomienda usar cuando
    uno ya tiene zumbadores en la mochila y solo la primera vez, porque sino
    no cumpliria el reto de este algoritmo en particular)*)
    define-nueva-instruccion av-yd-una como
        inicio
            mientras frente-libre hacer
                avanza;
            mientras frente-bloqueado hacer
                inicio
                    gira-izquierda;
                    avanza;
                    gd;
                fin;
            avanza;
            gd;
            mientras frente-libre hacer
                avanza;
            mientras algun-zumbador-en-la-mochila hacer
                deja-zumbador;
        fin;
    (*regresa-una. Regresa, como su nombre lo dice, esta instruccion se regresa
    a la primera pocision, donde se empezo el algoritmo. Una, le puse una
    porque esta nada mas es recomendable usarse una vez, cuando uno va y deja
    los zumbadores por primera vez*)
    define-nueva-instruccion regresa-una como
    inicio
        mientras frente-bloqueado hacer
            inicio
                gd;
                avanza;
                gira-izquierda;
            fin;
            avanza;
            gira-izquierda;
            mientras frente-libre hacer
                avanza;
            gd;
            mientras no junto-a-zumbador hacer
                inicio
                    si no junto-a-zumbador y frente-libre entonces
                        avanza
                    sino
                        apagate;
                fin;
            si junto-a-zumbador entonces
                inicio
                    mientras frente-libre hacer
                    avanza;
                fin;
            gd;
    fin;
    (*av-yd-necesarias(avanza-ydeja-necesarias) esta instruccion permite ir
    directamente del otro lado de la pared y dejar los zumbadores acomodandolos
    ya al otro lado de la pared. solo si la flecha esta en el lado izquierdo apuntando
    hacia el este y abajo de lo alto de la pared.(se recomienda usar cuando
    uno ya tiene un zumbador acomodado en el otro lado de la pared, porque sino
    no cumpliria el reto de este algoritmo)*)
    define-nueva-instruccion av-yd-necesarias como
        inicio
            mientras frente-libre hacer
                avanza;
            mientras frente-bloqueado hacer
                inicio
                    gira-izquierda;
                    avanza;
                    gd;
                fin;
            avanza;
            gd;
            mientras frente-libre hacer
                avanza;
            gira-izquierda;
            mientras junto-a-zumbador hacer
                avanza;
            mientras algun-zumbador-en-la-mochila hacer
                deja-zumbador;
        fin;
    (*regresa-necesarias. Regresa, como su nombre lo dice, esta instruccion se
    regresa a la primera pocision, donde se empezo el algoritmo. necesarias,
    le puse necesarias porque esta es recomendable usarse apartir de cuando
    uno ya tiene un zumbador acomodado al otro lado de la pared, y lo puede
    utilizar las veces necesarias para regesar apartir de acomodar los segundos
    zumbadores, si no encuentra zumbadores para trasladar al otro lado de la
    pared al regresarse, se apaga*)
    define-nueva-instruccion regresa-necesarias como
        inicio
            u;
            mientras frente-libre hacer
                avanza;
            mientras frente-bloqueado hacer
                inicio
                    gd;
                    avanza;
                    gira-izquierda;
                fin;
            avanza;
            gira-izquierda;
            mientras frente-libre hacer
                avanza;
            gd;
            mientras no junto-a-zumbador hacer
                inicio
                    si no junto-a-zumbador y frente-libre entonces
                        avanza
                    sino
                        apagate;
                fin;
            si junto-a-zumbador entonces
                inicio
                    mientras frente-libre hacer
                        avanza;
                fin;
            gd;
        fin;
    (*una. esta instruccion recoge los primeros zumbadores, va y los deja
    al otro lado de la pared y regresa a su pocision final solo una vez.*)
    define-nueva-instruccion una como
        inicio
             gd;
             ahz;
             cz-snt;
             av-yd-una;
             gd;
             regresa-una;
        fin;
    (*las-necesarias. esta instruccion, apartir de haber dejado los
    primeros zumbadores, recoge los zumbadores que faltan, los va y deja
    al otro lado de la pared, ordenados y regrresa para checar si no hay otros
    zumbadores por trasladar al otro lado de la pared*)
    define-nueva-instruccion las-necesarias como
    inicio
         gd;
         ahz;
         cz-snt;
         av-yd-necesarias;
         regresa-necesarias;
         las-necesarias;

    fin;

    inicia-ejecucion
        una;
        las-necesarias;
        apagate;
    termina-ejecucion
finalizar-programa
