Skip to content

Instantly share code, notes, and snippets.

@elo7-developer
Last active October 8, 2024 19:30
Show Gist options
  • Save elo7-developer/f0b91a7a98e5e65288b875ac6d376875 to your computer and use it in GitHub Desktop.
Save elo7-developer/f0b91a7a98e5e65288b875ac6d376875 to your computer and use it in GitHub Desktop.
Desafio de Programação Backend

Desafio de Programação do Elo7

Bem vindo candidato(a)!

Vamos explicar como funciona o nosso desafio:

Imagine que um desenvolvedor recebeu uma tarefa de uma pessoa da equipe de produto. A pessoa de produto queria poder controlar sondas em outros planetas por meio de comandos. Para explicar o funcionamento do produto, o seguinte exemplo foi escrito em um pedaço de papel:

Tamanho da área do planeta : 5x5

Posição de pouso da sonda 1: x=1, y=2 apontando para Norte
Sequência de comandos: LMLMLMLMM
Posição final da sonda: x=1 y=3 apontando para Norte

Posição de pouso da sonda 2: x=3, y=3 apontando para Leste
Sequência de comandos: MMRMMRMRRML
Posição final da sonda: x=5 y=1 apontando para Norte

A sequência de comandos é um conjunto de instruções enviadas da terra para a sonda, onde:
- M -> Andar para a frente na direção que está 1 posição
- L -> Virar a sonda para a esquerda (90 graus)
- R -> Virar a sonda para a direita (90 graus)

A orientação da sonda dentro do plano cartesiano usa uma rosa dos ventos como referência

rosa dos ventos

O desafio

Premissas técnicas

  • É obrigatório que a solução seja desenvolvida na linguagem Java
  • Preferencialmente NÃO utilize a biblioteca Lombok ou similares
  • Usando o github, faça um fork do projeto inicial
  • Com o repositório criado via fork, codifique sua solução, de preferência faça pequenos commits! Quando terminar sua solução por favor nos envie o link do repositório github por email.
  • O projeto possui swagger nesse endereço

Regra de negócios:

  • A criação e listagem de planetas e sondas já foi desenvolvida. Queremos que você foque apenas na criação do endpoint para movimentação de sondas, levando em conta os requisitos que podem ter sido deixados implícitos pela equipe de produto, como por exemplo a colisão de sondas, movimentação além dos limites de um planeta e etc.
  • Não se esqueça de tratar os erros de forma elegante.
  • No momento de decidir onde colocar as regras de negócio (lógica de movimentação da sonda etc) leia os links abaixo para entender nossos guidelines de como preferimos que seja isso feito:

Aspectos que vamos analisar:

  • Separar conceitos por classe (ex: Carro, Motor..);
  • Código precisa ser simples de entender (legibilidade do código);
  • Conhecimentos de modelagem na camada de modelo;
  • Orientação a Objeto (encapsulamento, divisão de responsabilidades, acoplamentos saudáveis, imutabilidade, SOLID e etc);
  • REST (Conhecimentos de endpoint, métodos HTTP).
  • Documentação do sistema (ex: README)
  • Testes de unidade para as regras de negócio mais importantes (apenas dos componentes envolvidos na movimentação da sonda).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment