Tempo de leitura: menos de 1 minuto
Fala galera, chega ao fim mais um codekata: CodeKata #6: Conversão numérica.
Nesta edição, tivemos a participação de 3 pessoas, sendo que 2 deles pela primeira vez, são eles:
- Flávio Pimenta;
- Carlos Batistão;
- Mateus Marquezine.
Agradeço a participação de vocês.
Sentimento sobre o problema proposto
O problema desta vez foi bem simples, não é uma coisa complicada a conversão de indo-arábico para romanos e vice-versa. Isso quando falamos de número romano simples, aquele que poder ser representado facilmente até o número 3999 (MMMCMXCIX). Digo isso, pois na elaboração do problema, não defini muito bem qual era o resultado esperado a partir deste número, assim cada participante entendeu de uma forma qual seria o número esperado, dificultado a avaliação do resultado.
Tivemos os seguintes retorno para a conversão do número 6.000, por exemplo:
- (V)(I)
- (VI)
- (V)M
Qual está correta? Na verdade todas, procurei em várias fontes e cheguei a conclusão que não existe um forma correta, assim foi necessário criar uma test table para cada um das implementações, então se quiserem obter o mesmo resultado que eu, será necessário rodar a test table correta para cada uma das implementações.
De mais trabalho? Sim… Foi foi legal ver a várias formas diferente de resolver um problema simples.
Resultado
Para esta edição do CodeKata, criei 50 cenários de teste, sendo 38 cenário são de negócio, ou seja, cenários que testam o retorno de cada método. Os outros 12 cenários, são de restrições. Os seguintes critérios foram avaliados:
- Retorno:
- Número indo-arábico;
- Numeral romano.
- Restrições:
- Limites: 1 à 15000 e I à (XV) ou (X)(V);
- Numeral romanos válidos: MDCLXVI;
- Sequência de numeral romanos: IIII, IVIV, etc…;
- Precedências: IM, XM, etc…
- Performance:
- As implementações entregues executaram muito rápido, menos de 3 milissegundos, com exceção do 1° cenário do Batistão que rodou em 13 milissegundos.
- Nesta edição também foi 2 pontos bônus para a implementação que executou todos os cenários no menor tempo. Para ser justo, o tempo total foi dividido pela quantidade de testes que passaram (verdes), gerando uma média de tempo por cenário. Desta forma o bônus foi dado para a melhor média.
Abaixo segue resultado dos participantes:
Parabéns Carlos Batistão, você foi o campeão do desafio com 94% de aproveitamento!
O log de execuções dos testes com os acertos e falhas estão disponíveis na planilha LogsTeste#6, clique e faça o download.
Pontuação para o Ranking
A regra da pontuação para o ranking utilizada nesta edição, foi dada no enunciado do CodeKata. Assim, o quadro de pontuação para o ranking ficou assim:

Acho importante mencionar também o resultado obtido pelo Mateus. Sua implementação respondeu muito bem até o cenários que validavam os múltiplos de 1000, ou seja, conversão a partir do número 4000. De indo-arábico para romano, sua implementação estava correta, sempre retornando o valor esperado, no entanto quando solicitado romano para indo-arábico, o retorno era sempre o milhar, ou seja, entrada: (IV), saída: 4. Faltou apenas multiplicar o valor por 1000. De qualquer forma, parabéns pela iniciativa.
Ranking
Com a pontuação obtida pelos participantes e a regra de corte na pontuação, ou seja, são validos apenas a pontuação dos últimos 5 codekatas, o r
anking ficou assim:

O interessando neste quadro que o Junior e Débora, subiram no ranking sem terem entregue o Codekata #6, isso ocorreu pois o Fernando e o Darian perderam a pontuação obtida no codekata #1. O Rafael perdeu a segunda colocação pelo mesmo motivo.
Batistão e Mateus debutaram no ranking em 5° e 9° respectivamente.
E o Flávio Pimenta manteve a 1° colocação, abrindo larga vantagem para o novo 2° lugar Lucas.
Veja todos os rankings até agora!
Conclusão
Parabéns Carlos Batistão, por ter alcançado 94% de assertividade e vencido o Codekata#6. E parabéns Flávio Pimenta por criar a solução mais performatica e na pontuação geral conseguir tirar a diferença.
Todas as implementações e cenários de testes estão disponíveis no Github.
