iniciar-programa

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

define-nueva-instruccion orientarse como inicio
    si junto-a-zumbador entonces inicio
        coge-zumbador;
        orientarse;
        gira-izquierda;
    fin;
fin;

define-nueva-instruccion resolver(a) como inicio
    si no si-es-cero(a) o junto-a-zumbador entonces inicio
        si junto-a-zumbador entonces orientarse;
        si orientado-al-norte entonces inicio
            avanza;
            resolver(sucede(sucede(sucede
                    (sucede(sucede(sucede
                    (sucede(sucede(sucede
                    (sucede(sucede(a))))))))))));
        fin sino si orientado-al-sur entonces inicio
            avanza;
            resolver(precede(precede(precede
                    (precede(precede(precede
                    (precede(precede(precede
                    (precede(precede(a))))))))))));
        fin sino si orientado-al-este entonces inicio
            avanza;
            resolver(sucede(sucede(sucede
                    (sucede(sucede(sucede
                    (sucede(sucede(sucede
                    (sucede(sucede(sucede
                    (sucede(sucede(sucede
                    (sucede(sucede(a))))))))))))))))));
        fin sino si orientado-al-oeste entonces inicio
            avanza;
            resolver(precede(precede(precede
                    (precede(precede(precede
                    (precede(precede(precede
                    (precede(precede(precede
                    (precede(precede(precede
                    (precede(precede(a))))))))))))))))));
        fin;
    fin sino inicio
        apagate;
    fin;
fin;

    inicia-ejecucion

    deja-zumbador;
    gira(3);
    resolver(0);

        apagate;
    termina-ejecucion
finalizar-programa
