Escribe un simulador de robots.
El centro de pruebas de una fábrica de robots necesita un programa para verificar los movimientos de los robots.
Los robots tienen tres movimientos posibles:
Los robots se colocan en una cuadrícula infinita hipotética, mirando en una dirección concreta (north, east, south o west) en un conjunto de coordenadas {x,y}, por ejemplo, {3,8}, con las coordenadas aumentando hacia el norte y el este.
El robot recibe entonces una serie de instrucciones, momento en el que el centro de pruebas verifica su nueva posición y hacia dónde apunta.
Las pruebas están separadas en 3 pasos.
Ejecuta todas las pruebas con go test o ejecuta pruebas concretas con la opción -tags.
Ejemplos:
go test # run all tests
go test -tags step1 # run just step 1 tests.
go test -tags 'step1 step2' # run step1 and step2 tests
Se te proporciona el archivo fuente defs.go, que define varias cosas que el programa de pruebas necesita. Está organizado en tres secciones, una por cada paso.
Para completar el paso 1, definirás Right, Left, Advance, N, S, E, W y Dir. Completa el paso 1 antes de pasar al paso 2.
En el paso 1 implementaste los movimientos del robot, pero no es una gran simulación. Por ejemplo, ¿dónde está «el robot» en el código fuente? ¿Dónde está «la cuadrícula»? ¿Dónde están los cálculos que convierten las acciones del robot en posiciones de la cuadrícula, en el robot o en la cuadrícula? El mundo físico es diferente.
El paso 2 introduce una «sala». Parece una pequeña adición, pero haremos grandes cambios para aclarar los roles de «sala», «robot» y «programa de pruebas», y empezaremos a aclarar la física de la simulación. Definirás Room y Robot como funciones que el programa de pruebas «hace existir» lanzándolas como goroutines. La información se mueve entre el programa de pruebas, el robot y la sala a través de canales de Go.
Piensa en Room como un «motor de físicas», algo que modela y simula una sala física con paredes y un robot. De algún modo debe modelar el espacio de coordenadas de la sala, la ubicación del robot y de las paredes, y garantizar, por ejemplo, que el robot no atraviese las paredes. Queremos que Robot sea un agente que realiza acciones, pero queremos que Room mantenga una verdad coherente.
El programa de pruebas crea los canales e inicia tanto Room como Robot. Después, el programa de pruebas envía comandos a Robot. Cuando termina de enviar comandos, cierra el canal de comandos. Robot debe aceptar comandos e informar a Room de las acciones que intenta. Cuando detecta que el canal de comandos se está cerrando, debe apagarse. La sala debe interpretar las consecuencias físicas de las acciones del robot. Cuando detecta que el robot se apaga, envía un informe final de vuelta al programa de pruebas, indicando la posición y la dirección finales del robot.
El paso 3 tiene tres cambios importantes:
Para el informe de posición final enviado desde Room3, puedes devolver el mismo slice recibido del canal de robots, solo con las posiciones y direcciones actualizadas. Se deben enviar mensajes por el canal de registro para
Regístrate en Exercism para aprender y dominar Go con 34 conceptos165 ejercicios y mentoría humana real, todo gratis.