Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save elo7-ci/f2446f487139539fcf695ac4e8aae57f to your computer and use it in GitHub Desktop.

Select an option

Save elo7-ci/f2446f487139539fcf695ac4e8aae57f to your computer and use it in GitHub Desktop.

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:

Explicação da necessidade:

Tamanho da área do planeta : 5x5

Posição de pouso da sonda 1: x=1, y=2 apontando para Norte
Sequencia 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
Sequencia de comandos: MMRMMRMRRML
Posição final da sonda: x=5 y=1 apontando para Norte

Detalhes sobre o funcionamento acima:

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

Certifique-se que você leu atenciosamente todos os checkbox para a sua vaga (estágio ou júnior). Os links que passamos são informativos, se você já domina os conteúdos não se sinta obrigado a lê-los! (mas se você está em dúvida provavelmente será melhor fazer a leitura)

Regra de negócios:

  • Primeiramente você precisa verificar se a equipe de produto não pensou em todos detalhes da regra de negócios. Pense quais comportamentos fazem sentido para dar suporte em um cenário com várias sondas pousando e se movimentando em um mesmo planeta com uma superfície limitada (podendo haver vários planetas). Considere que as sondas possuem combustível infinito e podemos passar comandos para uma sonda pousada a qualquer momento no futuro.

  • Para modelar a regra de negócio, pense nas principais palavras usadas pela pessoa de produto para descrever o problema, possivelmente fará sentido você criar classes para representar elas no seu código!

  • 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:

  • https://www.alura.com.br/artigos/nao-aprender-oo-getters-e-setters

  • https://www.alura.com.br/artigos/o-que-e-modelo-anemico-e-por-que-fugir-dele

  • Crie um repositório no github ou bitbucket e coloque a sua solução por lá, de preferência faça pequenos commits! Favor enviar email com o repositório do teste assim que criá-lo, vamos tentar acompanhar a solução. Quando terminar sua solução por favor nos avise por email.

Para vagas de estágio:

Para vagas de estágio não esperamos que o candidato saiba como fazer uma API web. Se você está concorrendo a esse tipo de vaga sua tarefa é:

  • Fazer a entrada de dados via terminal, lendo a entrada em um método main
  • Um diferencial (não obrigatório) para essa vaga é a cobertura das regras de negócio com testes de unidade. Segue um link sobre o tópico caso você queira encarar esse desafio:
  • https://www.devmedia.com.br/testes-unitarios-em-java/1549

Para vagas junior:

//imports omitidos

public class BancoEmMemoriaSonda {
    private static List<Sonda> sondas = new ArrayList<>();
    private static int proximoId = 1;

    public void salva(Sonda sonda) {
        sonda.setId(proximoId);
        proximoId += 1; //curiosidade: essa linha poderia ser usada acima com um proximoId++
        sondas.add(sonda);
    }
    //outros métodos que você achar úteis
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment