- Por Emmanuel Valverde
- ·
- Publicado 28-feb-2024 0:00:00
Morning routine
Como soy una persona olvidadiza, necesito un método que me ayude a recordar mi rutina matutina. Por eso he creado un programa que, según la hora del..
Es muy común encontrar programas que dependen del estado. Esto es especialmente cierto en el código de interfaz de usuario.
Sin embargo, el estado también es una fuente muy común de errores. La principal razón por la que se producen estos fallos es que el estado es difícil de razonar.
Hasta cierto punto, los buenos test cases ayudan en los programas con estados. Sin embargo, las pruebas por sí solas no bastan, también es esencial un buen diseño.
Esta kata se presta a una variedad de enfoques de diseño orientado a objetos, lo que la convierte en una excelente forma de practicar tus habilidades de diseño. Se adapta bien a dos patrones de diseño en particular: el Command pattern y el State pattern.
Hay varias formas de practicar con esta kata. Sugerimos primero hacer una implementación inicial siguiendo los principios SOLID y las 4 reglas de diseño simple. Después, comprueba si puedes refactorizar tu solución para utilizar alguno de los patrones de diseño anteriores. También puedes volver a intentar la kata desde cero con una solución concreta en mente.
La NASA va a aterrizar un escuadrón de robots exploradores en una meseta de Marte.
Esta meseta, curiosamente rectangular, debe ser recorrida por los robots para que sus cámaras a bordo puedan obtener una vista completa del terreno circundante y enviarla a la Tierra.
Tu tarea consiste en desarrollar una API que movilice a los robots por la meseta.
En esta API, la meseta se representa como una cuadrícula de 10x10, y un robot tiene un estado que consta de dos partes:
N
, S
, E
, W
)El input del programa es una cadena de comandos de movimiento de un carácter:
L
y R
rotan la dirección en la que está orientado el robotM
mueve el vehículo una casilla hacia delante en la dirección en la que se encuentra en ese momento.Si un rover llega al final de la meseta, da un giro al final de la cuadrícula.
El output del programa es la posición final del robot después de que se hayan ejecutado todos los comandos de movimiento. La posición se representa como una pareja de coordenadas y una dirección, unidas por dos puntos para formar una cadena. Por ejemplo: un robot cuya posición es 2:3:W
está en la casilla (2,3), mirando al oeste.
La cuadrícula puede tener obstáculos. Si una secuencia de comandos determinada encuentra un obstáculo, el robot se desplaza hasta el último punto posible e informa del obstáculo anteponiendo O:
a la cadena de posición que devuelve. Por ejemplo, O:1:1:N
significaría que el robot ha encontrado un obstáculo en la posición (1, 2).
MMRMMLM
da un output de 2:3:N
MMMMMMMMMM
da un output de 0:0:N
(debido al giro)MMMM
da un output de O:0:2:N
No hay restricciones en el diseño de la interfaz pública. En concreto, gran parte de los detalles de la implementación de la función de obstáculo dependen de ti.
Una interfaz pública a la API podría parecerse a esto:
class MarsRover {
public MarsRover(Grid grid);
public String execute(String command);
}
Reglas:
RMMLM
y devuelve el punto final después de sus movimientos, por ejemplo 2:1:N
Crédito: Google Code Archive
Crédito: Google Code Archive
Como soy una persona olvidadiza, necesito un método que me ayude a recordar mi rutina matutina. Por eso he creado un programa que, según la hora del..
Historia: Durance ha encontrado un libro de magia en una de sus aventuras y ha decidido aprender a encantar sus armas. Debido a la naturaleza..
Resumen Esta kata es bastante avanzada, por lo que recomendamos que intentes resolverla una vez que hayas practicado TDD con otras katas más fáciles.
Suscríbete a nuestra newsletter para que podamos hacerte llegar recomendaciones de expertos y casos prácticos inspiradores