iniciar-programa
define-nueva-instruccion gira-derecha como repetir 3 veces gira-izquierda;
define-nueva-instruccion media-vuelta como repetir 2 veces gira-izquierda;
define-nueva-instruccion sal(x) como
inicio
    si frente-libre entonces
    inicio
        avanza;
    fin
    sino
    inicio
        gira-derecha;
        si frente-libre entonces
        inicio
            avanza;
        fin
        sino
        inicio
           media-vuelta;
           sal(x);
        fin;
        si junto-a-zumbador entonces
        inicio
            media-vuelta;
            avanza;
            media-vuelta;
            sal(x);
        fin
        sino
        inicio
            media-vuelta;
            avanza;
            media-vuelta;
            media-vuelta;
            si frente-libre entonces
            inicio
                avanza;
            fin
            sino
            inicio
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir x veces deja-zumbador;
                apagate;
            fin;                                       
            si junto-a-zumbador entonces
            inicio
                media-vuelta;
                avanza;
                media-vuelta;
                sal(x);
            fin
            sino
            inicio
                media-vuelta;
                avanza;
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir x veces deja-zumbador;
                apagate;
            fin;
        fin;
    fin;
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                si junto-a-zumbador entonces
                inicio
                    repetir 3 veces deja-zumbador;
                    sal(x)
                fin
                sino
                inicio
                    repetir 3 veces deja-zumbador;
                    sal(sucede(x));
                fin;
            fin
            sino
            inicio
                repetir 2 veces deja-zumbador;
                sal(sucede(x));
            fin;
        fin
        sino
        inicio
            deja-zumbador;
            sal(x);
        fin;
    fin
    sino
    inicio
        media-vuelta;
        avanza;
        media-vuelta;
        si derecha-libre entonces
        inicio
            gira-derecha;
            avanza;
            si junto-a-zumbador entonces
            inicio
                media-vuelta;
                avanza;
                media-vuelta;
                sal(x);
            fin
            sino
            inicio
                media-vuelta;
                avanza;
                media-vuelta;
                gira-izquierda;
                gira-izquierda;
                si frente-libre entonces
                inicio
                    avanza;
                fin
                sino
                inicio
                    mientras junto-a-zumbador hacer coge-zumbador;
                    repetir x veces deja-zumbador;
                    apagate;
                fin;
                si no junto-a-zumbador entonces
                inicio
                    media-vuelta;
                    avanza;
                    media-vuelta;
                    mientras junto-a-zumbador hacer coge-zumbador;
                    repetir x veces deja-zumbador;
                    apagate;
                fin
                sino
                inicio
                    media-vuelta;
                    avanza;
                    media-vuelta;
                    sal(x);
                fin;
            fin;
        fin
        sino
        inicio
            si izquierda-libre entonces
            inicio
                gira-izquierda;
                avanza;
                si junto-a-zumbador entonces
                inicio
                    media-vuelta;
                    avanza;
                    media-vuelta;
                    sal(x);
                fin
                sino
                inicio
                    media-vuelta;
                    avanza;
                    media-vuelta;
                    gira-derecha;
                    gira-derecha;
                    si frente-libre entonces
                    inicio
                        avanza;
                    fin
                    sino
                    inicio
                        mientras junto-a-zumbador hacer coge-zumbador;
                        repetir x veces deja-zumbador;
                        apagate;
                    fin;
                    si no junto-a-zumbador entonces
                    inicio
                        media-vuelta;
                        avanza;
                        media-vuelta;
                        mientras junto-a-zumbador hacer coge-zumbador;
                        repetir x veces deja-zumbador;
                        apagate;
                    fin
                    sino
                    inicio
                        media-vuelta;
                        avanza;
                        media-vuelta;
                        sal(x);
                    fin;
                fin;
            fin;
            si izquierda-bloqueada y derecha-bloqueada entonces
            inicio
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir x veces deja-zumbador;
                apagate;
            fin;
        fin;
    fin;
fin;
define-nueva-instruccion vas(x) como
inicio
    si frente-libre entonces
    inicio
        avanza;
    fin
    sino
    inicio
        gira-derecha;
        si frente-libre entonces
        inicio
            avanza;
        fin
        sino
        inicio
            media-vuelta;
            si frente-bloqueado y no si-es-cero(x) entonces
            inicio
                coge-zumbador;
                gira-izquierda;
                avanza;
                mientras junto-a-zumbador hacer coge-zumbador;
                repetir 5 veces deja-zumbador;
                apagate;
            fin;
            vas(x);
        fin;
        si junto-a-zumbador entonces
        inicio
            media-vuelta;
            avanza;                                                                              
            media-vuelta;
            vas(x);
        fin
        sino
        inicio
            media-vuelta;
            avanza;
            media-vuelta;
            media-vuelta;
            si frente-bloqueado entonces
            inicio
                mientras junto-a-zumbador hacer coge-zumbador;
                media-vuelta;
                avanza;
                repetir 5 veces deja-zumbador;
                apagate;
            fin;
            vas(x);
        fin;
    fin;
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                si junto-a-zumbador entonces
                inicio
                    repetir 3 veces deja-zumbador;
                    vas(x)
                fin
                sino
                inicio
                    repetir 3 veces deja-zumbador;
                    si si-es-cero (x) entonces sal(1);
                    vas(precede(x));
                fin;
            fin
            sino
            inicio
                repetir 2 veces deja-zumbador;
                si si-es-cero (x) entonces sal(1);
                vas(precede(x));
            fin;
        fin
        sino
        inicio
            deja-zumbador;
            vas(x);
        fin;
    fin
    sino
    inicio
        media-vuelta;
        avanza;
        media-vuelta;
        si derecha-libre entonces
        inicio
            gira-derecha;
            avanza;
            si junto-a-zumbador entonces
            inicio
                media-vuelta;
                avanza;
                media-vuelta;
                vas(x);
            fin
            sino
            inicio
                media-vuelta;
                avanza;
                media-vuelta;
                gira-izquierda;
                gira-izquierda;
                si frente-libre entonces
                inicio
                    avanza;
                fin
                sino
                inicio
                    media-vuelta;
                    mientras junto-a-zumbador hacer coge-zumbador;
                    mientras no orientado-al-este hacer gira-izquierda;
                    si frente-libre entonces
                    inicio
                        avanza;
                    fin
                    sino
                    inicio
                        mientras junto-a-zumbador hacer coge-zumbador;
                        repetir x veces deja-zumbador;
                        apagate;
                    fin;
                    repetir 5 veces deja-zumbador;
                    apagate;
                fin;
                si junto-a-zumbador entonces
                inicio
                    media-vuelta;
                    avanza;
                    media-vuelta;
                    vas(x);
                fin
                sino
                inicio
                    media-vuelta;
                    avanza;
                    media-vuelta;
                    mientras junto-a-zumbador hacer coge-zumbador;
                    mientras no orientado-al-este hacer gira-izquierda;
                    avanza;
                    repetir 5 veces deja-zumbador;
                    apagate;
                fin;
            fin;
        fin
        sino
        inicio
            si izquierda-libre entonces
            inicio
                gira-izquierda;
                avanza;
                si junto-a-zumbador entonces
                inicio
                    media-vuelta;
                    avanza;
                    media-vuelta;
                    vas(x);
                fin
                sino
                inicio
                    media-vuelta;
                    avanza;
                    media-vuelta;
                    gira-derecha;
                    gira-derecha;
                    si frente-libre entonces
                    inicio
                        avanza;
                    fin
                    sino
                    inicio
                        si si-es-cero(x) entonces
                        inicio
                            mientras junto-a-zumbador hacer coge-zumbador;
                            mientras no orientado-al-este hacer gira-izquierda;
                            avanza;
                            repetir 5 veces deja-zumbador;
                            apagate;
                        fin;
                    fin;
                    si junto-a-zumbador entonces
                    inicio
                        media-vuelta;
                        avanza;
                        media-vuelta;
                        vas(x);
                    fin
                    sino
                    inicio
                        media-vuelta;
                        avanza;
                        media-vuelta;
                        mientras junto-a-zumbador hacer coge-zumbador;
                        mientras no orientado-al-este hacer gira-izquierda;
                        repetir 5 veces deja-zumbador;
                        apagate;
                    fin;
                fin;
            fin
            sino
            inicio
                mientras junto-a-zumbador hacer coge-zumbador;
                si frente-libre entonces avanza;
                repetir 5 veces deja-zumbador;
                apagate;
            fin;
        fin;
    fin;
fin;
define-nueva-instruccion cuenta(x) como
inicio
    si junto-a-zumbador entonces
    inicio
        coge-zumbador;
        cuenta(sucede(x));
    fin
    sino
    inicio
        vas(x);
    fin;
fin;
    inicia-ejecucion
    cuenta(0);
        apagate;
    termina-ejecucion
finalizar-programa
