CodeKata #3: Restaurante

Tempo de leitura: menos de 1 minuto

Mortheus (Matrix) em posição de lutaE aí? Topa o desafio?

O último desafio (CodeKata #2: Caixa Eletrônico) foi bem legal. Existiam muitas pegadinhas e requereu um pouco mais de trabalho e atenção dos participantes. No post do resultado, falei de algumas dificuldades que tive para resolver o problema.

Durante o período deste desafio, rolaram várias conversas e possibilidades de solução, realmente foi legal a interação do pessoal em buscar a melhor solução.

Também recebi alguns feedbacks de como:

  • Maior tempo para solucionar o problema, quando o mesmo for mais complexo;
  • Entregar pelo menos um caso de teste para guiar o desenvolvimento (como o Codility faz);
  • Deixar mais claro o que espero de cada método. No CodeKata #2, o método contarNotas deveria chamar setEstoqueNotas, ou algo assim, desculpa pessoal.
  • Um dos meus cenário de teste, estava errado, quando solicitado o saque de R$ 100, esperava receber cinco notas sendo 1 de R$ 50,00, 2 de R$ 20,00 e 2 de R$ 5,00. No entanto, poderia também dispensar 5 notas de R$ 20,00 e o resultado seria o mesmo.

Espero corrigir os problemas reportados neste novo CodeKata. Estão prontos?

Regras

As regras são as mesmas, com exceção do prazo para entrega:

  • O desafio será dado, e qualquer leitor poderá participar.
  • O participante terá 15 dias para dar uma solução para o problema.
  • A solução deverá ser escrita em Java ou Groovy.
  • A solução deve ser enviada através do formulário no fim do post.
  • As melhores soluções e seus autores serão divulgadas em um post no dia previamente fixado.

Desafio: Restaurante

Enviar a solução até: 17/03/2016
Divulgação do resultado até dia: 21/03/2016

A empresa Nabucodonosor, para melhor atender seus funcionários, planeja fazer uma reforma no seu restaurante, mas para isso necessita saber qual o número máximo de pessoas que são atendidas simultaneamente no local. Para isso a Nabucodonosor, que possui catracas eletrônicas, coletou os seguintes dados:

  • Uma collection E, ordenada crescentemente, em que E[i] representa o instante em que a pessoa i entrou no restaurante;
  • Uma collection S, em que S[i] representa o instante em que a pessoa i saiu do restaurante.

As collections E e S são inteiros positivos que indicam o número de segundos transcorridos desde a abertura do restaurante. A entrada e a saída do restaurante se faz por uma única catraca, onde passa apenas uma pessoa por vez, de maneira que os tempos registrados em E e S são todos distintos.

Escreva um programa que, dado duas collections de inteiros E e S, ambas de comprimento igual a N, calcula o número máximo de pessoas que estão presentes ao mesmo tempo dentro do restaurante.

Exemplo 1: Dado que receba as seguintes collections E=[14, 67, 98] e S=[1890, 1900, 2123], o resultado esperado é o inteiro 3, pois 3 pessoas estavam simultaneamente no restaurante.

Exemplo 2: Dado que receba as seguintes collections E=[200, 1800] e S=[1543, 2324], o resultado esperado é o inteiro 1, pois não houverem pessoas simultaneamente no restaurante.

Restrições

  • 1 ≤ N ≤ 5.000
  • 1 ≤ E[i] ≤ 15.000, 1 ≤ i ≤ N
  • 1 ≤ S[i] ≤ 15.000, 1 ≤ i ≤ N
  • E[i] < E[i+i], para 1 ≤ i < N
  • E[i] < S[i], para 1 ≤ i ≤ N
  • E[i] ≠ S[j], para todo par i e j, 1 ≤ i ≤ N, 1 ≤ j ≤ N (Observação: j é uma segunda pessoa)

Interface a ser implementada

Implemente a interface:

[code language=”java”]
public interface IControleEntradaSaidaService {
/**
* Escreva um programa que, dado duas collections de inteiros E e S, ambos de comprimento igual a N,
* calcula o número máximo de pessoas que estão presentes ao mesmo tempo dentro do restaurante.
* Cada conjunto de E[i] e S[i], corresponde a entrada e saída de uma pessoa no restaurante.
*
* @param pListaEntradas correspontende a collection E,
* @param pListaSaidas
* @return número máximo de pessoas simultaneamente no restaurante
*/
public Integer calcularMaximoPessoasSimultaneamenteNoRestaurante (
List<Integer> pListaEntradas, List<Integer> pListaSaidas)
throws IllegalArgumentException;
}
[/code]

09/03/2016 – Pessoal esquece da exception, o método pode lançar IllegalArgumentException quando algo inesperado ocorrer!

Nota: Projeto disponível no GitHub.

Espero que gostem!!

Convide seus amigos para o CodeKata #3.

Pessoal, no post de resultado pretendo disponibilizar um ranking de pontuação dos participantes em todos os CodeKatas já publicados.

Enquanto isso, o que vocês acharam este CodeKata?

[polldaddy poll=9330760]

Formulário para envio da solução

Período finalizado.

Abraços

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *