iniciar-programa

define-nueva-instruccion gira(n) como repetir n veces gira-izquierda;

define-nueva-instruccion derecha como
si derecha-libre entonces
inicio
    gira(3);
    avanza;
    deja-zumbador;
    gira(2);
    avanza;
    gira(3);
fin;

define-nueva-instruccion izquierda como
si izquierda-libre entonces
inicio
    gira(1);
    avanza;
    deja-zumbador;
    gira(2);
    avanza;
    gira(1);
fin;

define-nueva-instruccion rodea como
inicio
    si frente-libre entonces
    inicio
        avanza;
        deja-zumbador;
        izquierda;
        derecha;
        gira(2);
        avanza;
        gira(2);
    fin;
    izquierda;
    derecha;
    gira(2);
    si frente-libre entonces
    inicio
        avanza;
        deja-zumbador;
        gira(2);
        izquierda;
        derecha;
        avanza;
    fin
    sino gira(2);
fin;

define-nueva-instruccion cambio como
si frente-bloqueado y derecha-libre entonces
inicio
    gira(2);
    mientras frente-libre hacer avanza;
    gira(1);
    avanza;
    gira(1);
fin;

define-nueva-instruccion cambio2 como
si izquierda-libre entonces
inicio
    gira(2);
    mientras frente-libre hacer avanza;
    gira(3);
    avanza;
    gira(3);
fin;

define-nueva-instruccion ve como
si junto-a-zumbador entonces
inicio
    repetir 9 veces
    inicio
        si junto-a-zumbador entonces coge-zumbador
        sino repetir 10 veces deja-zumbador;
    fin;
    si junto-a-zumbador entonces
    mientras junto-a-zumbador hacer coge-zumbador
    sino repetir 9 veces deja-zumbador;
fin;

define-nueva-instruccion casa como
inicio
    mientras no-orientado-al-sur hacer gira(1);
    mientras frente-libre hacer avanza;
    gira(3);
    mientras frente-libre hacer avanza;
    gira(3);
fin;

    inicia-ejecucion
    casa;
    mientras derecha-libre o frente-libre hacer
    inicio
        ve;
        si frente-libre entonces avanza;
        si frente-bloqueado entonces
        inicio
            ve;
            cambio;
        fin;
    fin;
    gira(2);
    mientras frente-libre hacer avanza;
    gira(2);
    mientras izquierda-libre o frente-libre hacer
    inicio
        si junto-a-zumbador entonces
        inicio
            coge-zumbador;
            si junto-a-zumbador entonces
            inicio
                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 5 veces coge-zumbador;
                                rodea;
                            fin
                            sino repetir 4 veces deja-zumbador;
                        fin
                        sino
                        repetir 3 veces deja-zumbador;
                    fin
                    sino repetir 2 veces deja-zumbador;
                fin;
            fin
            sino deja-zumbador;
        fin;
        si frente-libre entonces avanza;
        si frente-bloqueado entonces
        inicio
            si junto-a-zumbador entonces
            inicio
                coge-zumbador;
                si junto-a-zumbador entonces
                inicio
                    si junto-a-zumbador entonces
                    inicio
                        coge-zumbador;
                        si junto-a-zumbador entonces
                        inicio
                            si junto-a-zumbador entonces
                            inicio
                                coge-zumbador;
                                si junto-a-zumbador entonces
                                inicio
                                    repetir 6 veces coge-zumbador;
                                    rodea;
                                fin
                                sino repetir 3 veces deja-zumbador;
                            fin
                        fin
                        sino repetir 2 veces deja-zumbador;
                    fin
                fin
                sino deja-zumbador;
            fin;
            cambio2;
        fin;
    fin;
        apagate;
    termina-ejecucion
finalizar-programa
