CodeKata #6: Conversão numérica [Resultado]

Tempo de leitura: menos de 1 minuto

Fala galera, chega ao fim mais um codekata: CodeKata #6: Conversão numérica.Van Damme

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:

resultado codekata #6

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:

Pontuação final para o Ranking
O Pimenta conseguiu uma pontuação melhor graças ao bônus do tempo total de execução, no entanto a diferença foi de apenas 0,50 pontos em relação ao Batistão.

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:

Ranking CodeKata #6
Ranking após o Codekata #6

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.

Deixe um comentário

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