Um time de robôs devem ser colocados pela NASA para explorar um terreno em Marte. Esse terreno, que é retangular, precisa ser navegado pelos robôs de tal forma que suas câmeras acopladas possam obter uma visão completa da região, enviando essas imagens novamente para a Terra.
A posição de cada robô é representada pela combinação de coordenadas cartesianas (x, y)
e por uma letra, que pode representar uma das quatro orientações: NORTH
, SOUTH
, EAST
e WEST
. Para simplificar a navegação, a região “marciana” a ser explorada foi subdividia em sub-regiões retangulares.
Uma posição válida de um robô, seria (0, 0, N)
, que significa que o robô está posicionado no canto esquerdo inferior do terreno, voltado para o Norte.
Para controlar cada robô, a NASA envia uma string simples, que pode conter as letras L
, R
e M
. As letras L
e R
fazem o robô rotacionar em seu próprio eixo 90 graus para esquerda ou para direita, respectivamente, sem se mover da sua posição atual. A letra M
faz o robô deslocar-se uma posição para frente.
Assuma que um robô se movimenta para o NORTE em relação ao eixo y. Ou seja, um passo para o NORTE da posição (x,y)
, é a posição (x, y+1)
Exemplo: Se o robô está na posição (0,0,N)
, o comando MML
fará ele chegar na posição (0,2,W)
.
- O terreno deverá ser iniciado com
5x5
posições. - O robô inicia na coordenada
(0,0,N)
. - Deverá ser possível enviar um comando para o Robô que me retorne a posição final dele.
- O Robô não pode se movimentar para fora da área especificada.
- Não deve guardar estado do robô para consulta posterior.
Para o desenvolvimento da aplicação foram utilizadas a seguinte stack:
- Java 8
- Maven
- Docker e Docker Compose (Opcionais)
Primeiro vamos precisar executar o comanndo para que o maven baixe as dependencias necessárias para o projeto e faça o build da aplicação. Acesse a raiz do projeto e execute:
#/mars-robot/
$ mvn clean install
após finalizar acesse a pasta target e execute o jar gerado com o seguinte comando
#/mars-robot/target/
$ java -jar mars-robot-0.0.1-SNAPSHOT.jar
Outra opção para executar o projeto é via docker. Acesse a raiz do projeto e execute o seguinte comando para gerar a imagem da aplicação
#/mars-robot/
$ mvn dockerfile:build
Após finalizado execute o próximo comando para criar o container com a aplicação.
#/mars-robot/
$ docker-compose up
Essa versão também está disponível no Heroku. Para realizar o teste basta fazer uma requisição POST como descrito abaixo:
$ POST https://mars-robot-controll.herokuapp.com/api/mars-robot/moveto/{{comand}}
#Exemplo: https://mars-robot-controll.herokuapp.com/api/mars-robot/moveto/MML
O Foi disponibilizado o seguinte endpoint rest para possibilitar controlar o Robô:
$ POST http://localhost:8080/api/mars-robot/moveto/{command}
#Exemplo: http://localhost:8080/api/mars-robot/moveto/MML
Nome | Valor |
---|---|
command |
Uma string simples, que pode conter as letras L, R e M. Exemplo: MML |
Código | Quando ocorre | Resposta |
---|---|---|
200 |
Quano o robô é movimentado com sucesso, sua posição é retornada | (0,2,W) |
400 |
Quando passado um comando inválido | Um ou mais comandos informado estão inválido. |
400 |
Quando o robô excede os limites da área configurada. | O robô excedeu os limites da área configurada. |
500 |
Quando ocorre um erro inesperado no servidor | Ocorreu um erro inesperado, por favor entre em contato com o suporte técnico. |