iniciar-programa

    define-nueva-instruccion norte como
    inicio
        mientras no-orientado-al-norte hacer
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion sur como
    inicio
        mientras no-orientado-al-sur hacer
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion este como
    inicio
        mientras no-orientado-al-este hacer
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion oeste como
    inicio
        mientras no-orientado-al-oeste hacer
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion gira-derecha como
    inicio
        repetir 3 veces
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion gira-doble como
    inicio
        repetir 2 veces
        inicio
            gira-izquierda;
        fin;
    fin;

    define-nueva-instruccion camina como
    inicio
        mientras frente-libre hacer
        inicio
            avanza;
        fin;
    fin;

    define-nueva-instruccion llevar como
    inicio
        si junto-a-zumbador entonces
        inicio
           coge-zumbador;
           llevar;
           deja-zumbador;
        fin
        sino
        inicio
            sur;
            camina;
            oeste;
            camina;
        fin;
    fin;

    define-nueva-instruccion encuentra como
    inicio
        este;
        mientras no-junto-a-zumbador hacer
        inicio
            si frente-libre entonces
            inicio
               avanza;
            fin
            sino
            inicio
                gira-izquierda;
            fin;
        fin;
        llevar;
        apagate;
    fin;

    define-nueva-instruccion acomodar como
    inicio
        si frente-bloqueado entonces
        inicio
           oeste;
        fin
        sino
        inicio
            si izquierda-bloqueada entonces
            inicio
               sur;
            fin
            sino
            inicio
                si derecha-bloqueada entonces
                inicio
                   norte;
                fin
                sino
                inicio
                    este;
                fin;
            fin;
        fin;
    fin;

    define-nueva-instruccion empezar como
    inicio
        sur;
        camina;
        oeste;
        camina;
        este;
    fin;

    define-nueva-instruccion jaja(x) como
    inicio
        si (no((frente-bloqueado y derecha-bloqueada) y orientado-al-sur)) entonces
        inicio
            si frente-libre entonces
            inicio
                avanza;
                si junto-a-zumbador entonces
                inicio
                    jaja(sucede(x));
                fin
                sino
                inicio
                    jaja(x);
                fin;
            fin
            sino
            inicio
                gira-izquierda;
                avanza;
                si junto-a-zumbador entonces
                inicio
                    jaja(sucede(x));
                fin
                sino
                inicio
                    jaja(x);
                fin;
            fin;
        fin
        sino
        inicio
            si si-es-cero(precede(x)) entonces
            inicio
                encuentra;
            fin
            sino
            inicio
                este;
            fin;
        fin;
    fin;

    define-nueva-instruccion regre como
    inicio
        si frente-libre entonces
        inicio
           avanza;
           regre;
           este;
           avanza;
        fin
        sino
        inicio
            este;
            jaja(0);
        fin;
    fin;

    define-nueva-instruccion regresa como
    inicio
        si frente-libre entonces
        inicio
           avanza;
           regresa;
           norte;
           avanza;
        fin
        sino
        inicio
            oeste;
            regre;
        fin;
    fin;

    define-nueva-instruccion madiva(x) como
    inicio
        si junto-a-zumbador entonces
        inicio
           coge-zumbador;
           madiva(sucede(x));
        fin
        sino
        inicio
            mientras no-junto-a-zumbador hacer
            inicio
                repetir x veces
                inicio
                    deja-zumbador;
                fin;
                si frente-libre entonces
                inicio
                   avanza;
                fin
                sino
                inicio
                    gira-izquierda;
                    avanza;
                fin;
                mientras no-junto-a-zumbador hacer
                inicio
                    si frente-libre entonces
                inicio
                   avanza;
                fin
                sino
                inicio
                    gira-izquierda;
                    avanza;
                fin;
                fin;
            fin;
        fin;
    fin;

    define-nueva-instruccion accion(x) como
    inicio
        si junto-a-zumbador entonces
        inicio
           coge-zumbador;
           accion(sucede(x));
        fin
        sino
        inicio
            repetir x veces
            inicio
                madiva(0);
            fin;
            mientras no-junto-a-zumbador hacer
            inicio
                si frente-libre entonces
                inicio
                   avanza;
                fin
                sino
                inicio
                    gira-izquierda;
                fin;
            fin;
            sur;
            regresa;
            norte;
            acomodar;
        fin;
    fin;

    inicia-ejecucion
        empezar;
        mientras (no(frente-libre y frente-bloqueado)) hacer
        inicio
            accion(0);
        fin;
        apagate;
    termina-ejecucion
finalizar-programa
