23 de mayo de 2010

Reto 12 de ESET-LA

ESET Latino América realiza habitualmente diversos retos para hacer pensar a sus lectores.

El reto 12 de ESET trata de hacer que dos robots colisionen en una linea infinita. Os invito a ver la descripción original en el sitio de ESET Latino América en http://blogs.eset-la.com/laboratorio/2010/05/22/desafio-12-eset/

El principal problema que tenemos es que la linea al ser infinita evita que si ambos robots van en la misma dirección puedan colisionar, por tanto lo primero que tenemos que hacer es pensar como podemos hacer para acotar la linea.

Como desconocemos si el otro robot está a izquierda o a derecha, tendremos que ir mirando a uno y otro lado para ver si encontramos la marca (de aceite) del robot que buscamos y así poder acotar el recorrido.
Para esto tenemos que hacer una busqueda primero hacia un lado y luego hacia otro, asta encontar las marcas. Y luego ir siempre por este camino.

Para esto vamos ha hacer "bibar" sobre la marca de aceite a los robots e iremos incrementando su recorrido.

IZQ - Mover a izquierda
DER - Mover a derecha
¿ACEITE? - Evitar la siguiente instrucción si existe aceite en donde estoy
GOTO - Ir a etiqueta

Code Pseudolenguaje:
F_CONT = 0
F_MOV = FALSE
CONT = 1
MODO = FALSE

IR:
SI F_CONT > 0:
CONT = F_CONT;
MODO = F_MOV;

PARA CONT:
SI MODO:
IZQ;
SINO:
DER;
FINPARA

¿ACEITE?
GOTO VUELVE;
GOTO FOUND;

FOUND:
F_CONT = CONT;
F_MOV = MODO;

VUELVE:
MODO = !MODO;
PARA CONT:
SI MODO:
IZQ;
SINO:
DER;
FINPARA
CONT = CONT + 1;
GOTO IR;

No hay comentarios:

Publicar un comentario