Hoje, a maioria das pessoas no mundo usa algarismos arábicos (0–9). Mas se você voltasse dois mil anos no tempo, descobriria que a maioria dos europeus usava algarismos romanos.
Para escrever um algarismo romano, usamos as seguintes letras latinas, cada uma com um valor:
| M | D | C | L | X | V | I |
|---|---|---|---|---|---|---|
| 1000 | 500 | 100 | 50 | 10 | 5 | 1 |
Um algarismo romano é uma sequência dessas letras, e o valor dele é a soma dos valores das letras.
Por exemplo, XVIII tem o valor 18 (10 + 5 + 1 + 1 + 1 = 18).
Mas há uma regra que complica um pouco as coisas: a mesma letra não pode ser usada mais de três vezes seguidas.
Isso significa que não conseguimos expressar números como 4 com o aparentemente natural IIII.
Em vez disso, para esses números, usamos um método de subtração entre duas letras.
Então pensamos no 4 não como 1 + 1 + 1 + 1, mas como 5 - 1.
E, um pouco confuso para o nosso pensamento moderno, escrevemos o número menor primeiro.
Isso se aplica apenas nos seguintes casos: 4 (IV), 9 (IX), 40 (XL), 90 (XC), 400 (CD) e 900 (CM).
A ordem importa nos algarismos romanos! As letras (e os compostos especiais acima) devem ser ordenadas por valor decrescente, da esquerda para a direita.
Veja alguns exemplos:
105 => CV
---- => --
100 => C
+ 5 => V
106 => CVI
---- => --
100 => C
+ 5 => V
+ 1 => I
104 => CIV
---- => ---
100 => C
+ 4 => IV
E um último exemplo mais complexo:
1996 => MCMXCVI
----- => -------
1000 => M
+ 900 => CM
+ 90 => XC
+ 5 => V
+ 1 => I
Sua tarefa é converter um número de algarismos arábicos para algarismos romanos.
Para este exercício, vamos considerar apenas os algarismos romanos tradicionais, em que o maior número é MMMCMXCIX (ou 3.999).
Há muitas maneiras diferentes de converter entre algarismos arábicos e romanos. Recomendamos adotar uma abordagem ingênua primeiro para se familiarizar com o conceito de algarismos romanos e depois buscar métodos mais eficientes.
Não deixe de conferir nosso vídeo Deep Dive no final para explorar as diferentes abordagens que você pode adotar!
Este exercício exige que você escreva um método de extensão. Para mais informações, veja extension methods.
Crie sua conta no Exercism para aprender e dominar Visual Basic com 113 exercícios e mentoria humana de verdade, tudo de graça.
Explore várias soluções diferentes para este exercício complicado, que vão da recursão a consultas em tabelas, passando por uma solução que usa números de base mista e uma trapaça simplista em Common Lisp.