Crie a função mais curta para converter uma sequência de números romanos em um número inteiro.
As regras para cada letra podem ser encontradas na página da Wikipedia . Letras acima de 1.000 terão parênteses ao redor deles para sinalizar seu valor mais alto.
Requisitos:
- É necessário converter números romanos 1 em 500.000
- Deve ser concluído em menos de um minuto
- Não usa funções internas que possam fornecer uma vantagem (Ex: Uma função que converte números romanos em números inteiros)
- É uma função
A função não precisa suportar frações. Qualquer entrada inválida deve retornar o número 0.
A função mais curta vence. No caso de empate, vence o com mais votos.
Casos de teste
Entrada
III
Resultado
3
Entrada
IIII
Resultado
0
Entrada
XVI
Resultado
16
Entrada
(C)(D)(L)MMI
Resultado
452001
Imprópria para mim, significa ilegal e, portanto, deve retornar 0.
—
Martin Iorque
@ Anon: O número era um erro de digitação quando mudei o terceiro caso de teste original. Ele não precisa oferecer suporte a formulários incorretos, pois seria considerado uma entrada inválida.
—
22411 Kevin Kevin Brown
A prática padrão (e as especificações da duplicata desta pergunta) é que a entrada inválida seja um comportamento indefinido. Como esta pergunta tem quatro anos e apenas uma resposta, devemos alterar os requisitos?
—
precisa saber é o seguinte
@KevinBrown Não vejo uma fonte ou explicação para as cartas entre parênteses. Acho que você deve alterar as especificações para coincidir com codegolf.stackexchange.com/q/16254/43319 e, em seguida, as respostas de lá podem ser migradas aqui.
—
Adám
(C)(D)(L)MMI
seria 452.001. Como você conseguiu seu valor? Além disso, isso precisa suportar formulários "impróprios" (por exemplo, emIC
vez deXCIX
)?