Tempo de leitura: menos de 1 minuto
E aí galerinha, como vão vocês? Topam mais um Codekata? Então vamos lá! Ajudem-me a divulgar, quanto mais pessoas participarem mais emocionante o desafio fica, aumentando a rivalidade no ranking e zoação dos participantes.
Falando em ranking, na edição passada, o Flávio Pimenta tomou a ponta. Você vão deixar barato? kkkk…
No CodeKata #5: Número de Erdős foi bem legal, um desafio diferente, com dificuldade mediada. Foram 4 participantes, ótimas idéias para resolução do problema.
Regras
- O desafio será dado e qualquer leitor poderá participar.
- Os participantes terão duas semanas para dar uma solução para o problema.
- A solução deverá ser escrita em Java ou Groovy.
- A solução deverá ser enviada por e-mail:

- As soluções e seus autores serão divulgados em um post no dia previamente fixado.
- Pontuação para o ranking:
- 100 dividido pela quantidade de cenários de teste, será a pontuação dada ao cenário que ficar verde, os cenários que falharem não pontuam.
- Pontuação por acerto (cenário verde) = 100/n° cenários
- Cenário cujo objetivo seja testar as restrições terá penalização de – 0,5 por cenário que ficar verde.
- Performance (válidos apenas para cenários que passarem, ficarem verdes):
- Bonificação (Média para baixo): + 0,25 por cenário;
- Penalização (Acima da média): – 0,25 por cenário;
- Adicional de 2,0 pontos para o participante que entregar a solução com maior performance (o vencedor será conhecido quando a solução dada por ele executar todos os cenários mais rapidamente que seus oponentes).
- 100 dividido pela quantidade de cenários de teste, será a pontuação dada ao cenário que ficar verde, os cenários que falharem não pontuam.
Desafio: Conversão numérica
Enviar a solução até: 12/07/2016
Divulgação do resultado até dia: 15/07/2016
O sistema de numeração romana (ou números romanos) desenvolveu-se na Roma Antiga e utilizou-se em todo o seu Império. Neste sistema as cifras escrevem-se com determinadas letras, que representam os números. As letras são sempre maiúsculas, já que no alfabeto romano não existem as minúsculas, as letras são I, V, X, L, C, D e M.
Cada letra corresponde a um determinado valor:
- I = 1
- V = 5
- X = 10
- L = 50
- C = 100
- D = 500
- M = 1000
Algumas regras para a formação dos números romanos:
- Um número menor antes de um número maior significa subtração, exemplo: IV significa 4.
- Não se utiliza mais de um número menor antes de um número maior para subtrair. Por exemplo, IIV não corresponde a 3.
- A adição é caracterizada por um número maior antes de um número menor, exemplo: VI significa 6.
- Devem separar-se, dezenas, centenas, e milhares como numerais separados, isso significa que a 99 corresponde XCIX (90 + 9), nunca deve ser escrito como IC.
- Uma linha sobre um numeral significa multiplicá-lo por 1000. O numeral V com uma linha sobre o símbolo significa 5000.
Por exemplo de conversão:
- 3 = III
- 4 = IV
- 51 = LI
- 99 = XCIX
- 1001 = MI
- 3999 = MMMCMXCIX
- 5000 = V
Tarefa
Sua tarefa é desenvolver um programa que converta números indo-arábicos (1, 2, 3, …., n) para o formato romano (I, II, III, …., n) e vice-versa.
Premissas e Restrições
- Números serão válidos entre 1 e 15000.
- A representação de múltiplos de mil (vide regra 4), como não temos uma carácter correspondente a linha sobre o numeral, deverá ser usado o número entre parenteses, exemplos:
- 5000 = (V)
- 6001 = (V)(I)I
- Apenas serão aceitas representação de múltiplos de mil a partir do número 4000.
- Serão aceitos como entrar número indo-arábicos e número romanos (conforme premissa anterior), sendo que a saída esperada será sempre o inverso da entrada.
Interface a ser implementada
Essa vez o retorno é muito simples, basta retornar um inteiro, dispensando assim a necessidade de um TO específico.
Implemente a interface:
[code language=”java”]
public interface IConversorNumericoService {
/**
* Método responsável por receber um número romano e converte-lo para indo-arábico .
* Exemplos:
* – Entrada: II; saída: 2;
* – Entrada: M; saída: 1000.
* @param pNumeroRomano
* @return número indo-arábico
*/
public String converterParaIndoArabico(String pNumeroRomano) throws IllegalArgumentException;;
/**
* Método responsável por receber um número indo-arábico e converte-lo para romano.
* Exemplos:
* – Entrada: 10; saída: X;
* – Entrada: 1000; saída: M.
* @param pIndoArabico
* @return número romano
*/
public String converterParaRomano(String pIndoArabico) throws IllegalArgumentException;;
}</pre>
<pre>[/code]
Nota: Projeto disponível no GitHub, junto também estou disponibilizando a Test Table para facilitar a adição de cenários de teste na construção da solução.
Espero que gostem!!
Participe e convide seus amigos a participarem do CodeKata #6.
Envio da solução / implementação
Envie sua solução para o e-mail:
, com a implementação em anexo
Abraços

Link permanente
Link permanente