Para completar a etapa do desafio você terá que baixar a estrutura do código aqui na Azure, resolver o desafio usando Javascript e entregá-lo no repositório no seu github.
Para baixar a estrutura no formato zip, basta clicar neste link.
Após resolver o desafio e validá-lo com os testes (mais detalhes nos tópicos abaixo), você terá que criar um repositório público no Github com o nome de desafio-seuUsername-2024
(substitua "seuUsername" pelo seu usuário do GitHub) e colocar o código na branch main
.
Se você ainda não teve contato com essa ferramenta, não tem problema. Separamos um material para lhe ajudar nessa etapa: Como usar Git e Github na prática.
Olá! Você foi contratado para ajudar na organização de um zoológico. Sua missão será construir a lógica para indicar os recintos onde novos animais se sintam confortáveis.
O zoológico possui os seguintes recintos disponíveis.
número | bioma | tamanho total | animais existentes |
---|---|---|---|
1 | savana | 10 | 3 macacos |
2 | floresta | 5 | vazio |
3 | savana e rio | 7 | 1 gazela |
4 | rio | 8 | vazio |
5 | savana | 9 | 1 leão |
O zoológico só está habilitado a tratar dos animais abaixo. A tabela mostra o espaço que cada indivíduo ocupa e em quais biomas se adapta.
espécie | tamanho | bioma |
---|---|---|
LEAO | 3 | savana |
LEOPARDO | 2 | savana |
CROCODILO | 3 | rio |
MACACO | 1 | savana ou floresta |
GAZELA | 2 | savana |
HIPOPOTAMO | 4 | savana ou rio |
- Um animal se sente confortável se está num bioma adequado e com espaço suficiente para cada indivíduo
- Animais carnívoros devem habitar somente com a própria espécie
- Animais já presentes no recinto devem continuar confortáveis com a inclusão do(s) novo(s)
- Hipopótamo(s) só tolera(m) outras espécies estando num recinto com savana e rio
- Um macaco não se sente confortável sem outro animal no recinto, seja da mesma ou outra espécie
- Quando há mais de uma espécie no mesmo recinto, é preciso considerar 1 espaço extra ocupado
- Não é possível separar os lotes de animais nem trocar os animais que já existem de recinto (eles são muito apegados!). Por exemplo, se chegar um lote de 12 macacos, não é possível colocar 6 em 2 recintos.
- O programa deve receber tipo e quantidade de animal (nessa ordem)
- O programa deve retornar uma estrutura contendo a lista de todos os recintos viáveis ordenada pelo número do recinto (caso existam) e a mensagem de erro (caso exista)
- A lista de recintos viáveis deve indicar o espaço livre que restaria após a inclusão do(s) animal(is) e o espaço total, no formato "Recinto nro (espaço livre: valorlivre total: valortotal)"
- Caso animal informado seja inválido, apresentar erro "Animal inválido"
- Caso quantidade informada seja inválida, apresentar erro "Quantidade inválida"
- Caso não haja recinto possível, apresentar erro "Não há recinto viável"
Entrada para um caso válido
"MACACO", 2
Saída
{
recintosViaveis: ["Recinto 1 (espaço livre: 5 total: 10)",
"Recinto 2 (espaço livre: 3 total: 5)",
"Recinto 3 (espaço livre: 2 total: 7)"]
}
Entrada para um caso inválido
"UNICORNIO", 1
Saída
{
erro: "Animal inválido"
}
Você está recebendo uma estrutura básica para desenvolver a lógica do desafio. O arquivo principal está localizado dentro da pasta src
e se chama recintos-zoo.js
. Você pode desenvolver a sua lógica criando outros arquivos, métodos e até mesmo outras classes, porém o resultado deve poder ser obtido através do método analisaRecintos
.
ALERTA: É importante que essa estrutura básica não seja alterada, pois as etapas automáticas da nossa validação dependem disso. Conseguir executar os passos descritos mais adiante na seção
VALIDANDO A SOLUÇÃO
também ajudará você a verificar que seu código segue a estrutura definida.
Exemplo de chamada
new RecintosZoo().analisaRecintos('MACACO', 2);
- Instalar o Node
- Instalar dependencias do projeto com o seguinte comando:
npm install
Junto com a estrutura básica você está recebendo alguns cenários de testes no arquivo recintos-zoo.test.js
para auxiliar na validação da sua solução. Recomendamos que você crie mais casos de teste para aumentar a confiabilidade da sua solução.
Para testar sua solução com os cenários existentes ou novos, rode o seguinte comando:
npm test
Para saber mais consulte a Documentação do Jest.
Para garantir que seu desafio vai ser considerado entregue, revise os seguintes pontos:
O repositório deve ser público e ter o nome e branch indicados na seção ENTREGANDO O DESAFIO
.
Para verificar que o repositório é público, deslogue-se do github e tente ver o código. Se conseguir, nós também conseguimos! Lembrando que vamos usar o link para o usuário informado durante o cadastro na Gupy. Veja como alterar a visibilidade.
A solução deve ser entregue em javascript e a estrutura de pastas e arquivos deve seguir o indicado na seção O CÓDIGO
.
O export da classe deve ser mantido da seguinte maneira para compatibilidade com o arquivo de testes:
export { RecintosZoo as RecintosZoo };
Se todos os passos forem seguidos corretamente, você terá um repositório como o da figura abaixo (lembrando que é permitido criar mais arquivos), onde seuUsername
é o seu usuário do GitHub, que você informou no questionário da Gupy.