Estamos desenvolvendo um produto que basicamente usa drones para mapear uma região e tirar fotos 360º e criar um mapa de navegável, muito parecido com o Google Street View. Então o desafio é criar uma ferramenta para controlar esses drones. 🚁
Imagine que a região aonde os drones devem sobrevoar é um plano de X por Y metros e os drones só vão se locomover dentro desse plano de metro em metro (logo eles se locomovem em um grid) e a cada ponto de parada eles vão tirar uma foto 360º.
Quando eles são ligados, devem receber uma cordenada cartesiana de para onde eles vão se posicionar e para qual lado do bússula a camêra deve estar apontando, por exemplo (4, 3, N) levará o drone para as coordenadas 4metros no eixo X e 3metros no eixo Y, apontando a câmera para norte. Os pontos cardeais esperados são 4: (N)orte, (S)ul, (L)este e (O)este.
Uma vez ligados, cada drone deverá receber uma lista de comandos, em formato de string, que deverá ser executada sequencialmente e a cada comando executado uma foto 360º é tirada automaticamente. Os comandos possíveis são: (D)ireita, (E)squerda, (F)rente. A cada vez que o drone receber um comando de "D" ou "E" ele fará um giro de 90º. Ex: "DFFEEFDFE" Nesse exemplo vão ser tiradas 5 fotos.
Construa um programa de linha de comando que ao ser iniciado receberá como parâmetros o tamanho da área que deve ser fotografada e então espere receber, a cada linha, a sequência de strings para posicionar e movimentar cada drone. Ao final do programa deve ser exibido um simples relatório mostrando a posicão final, para qual ponto cardeal a câmera está apontando e quantas fotos foram tiradas por cada drone.
ex:
Nesse exemplo, as coordenadas de inicalização do drone e para qual ponto cardeal ele deve estar apontado no início foi enviada juntamente com a sequência de comandos.
- Dentre as linguagens sugeridas, foi escolhido o NodeJS devido a conhecimento prévio em JavaScript, mas não necessariamente em NodeJS.
- Requisito: Docker, make
- Executando:
$> git clone https://github.com/maypimentel/challenge-echo.git
$> cd challenge-echo
$> make run
$> startGrid XXxYY
$> exit
$> startGrid 20x20
-> Irá iniciar um grid de dimenções [X,Y] = [20,20]- Explicando o formato do comando: Ex:
0806SDFEEF
[0806]SDFEEF
-> Os 4 primeiros dígitos indicam onde o drone irá iniciar. Nesse caso 0806 ~= [X,Y] = [08,06];0806[S]DFEEF
-> Indica a direção da face do Drone, neste caso,S
para o Sul, podendo ser aindaN
Norte,L
Leste,O
Oeste;0806S[DFEEF]
-> Comandos de movimentação do drone, onde a LetraD
é virar 90ᵒ para Direita, a LetraF
é andar 1 metro à frente e a LetraE
é virar 90ᵒ para a Esquerda.
- Ao final, poderá ser impresso o grid com as marcações de onde os drones obtiveram as fotografias.
- Teste unitátio:
$> make run-test
- Implementar paralelismo, de maneira que os comandos dos drones possam ser executados em paralelo.