Percursos
/
Crystal
Crystal
/
Exercícios
/
Números romanos
Números romanos

Números romanos

Fácil

Introdução

Hoje em dia, a maioria das pessoas no mundo usa algarismos árabes (0–9). Mas se recuasses dois mil anos, verias que a maioria dos europeus usava algarismos romanos.

Para escrever um número 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 número romano é uma sequência destas letras, e o seu valor é a soma dos valores das letras. Por exemplo, XVIII tem o valor 18 (10 + 5 + 1 + 1 + 1 = 18).

Há, no entanto, uma regra que torna tudo mais complicado: a mesma letra não pode ser usada mais de três vezes seguidas. Isso significa que não podemos representar números como o 4 com o aparentemente natural IIII. Em vez disso, para esses números, usamos um método de subtração entre duas letras. Por isso, pensamos no 4 não como 1 + 1 + 1 + 1, mas sim como 5 - 1. E, de forma um pouco confusa para o nosso pensamento moderno, escrevemos primeiro o número menor. Isto aplica-se apenas nos seguintes casos: 4 (IV), 9 (IX), 40 (XL), 90 (XC), 400 (CD) e 900 (CM).

A ordem é importante nos números romanos! As letras (e os compostos especiais acima) têm de estar ordenadas por valor decrescente, da esquerda para a direita.

Aqui estão 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

Instruções

A tua tarefa é converter um número de algarismos árabes para algarismos romanos.

Neste exercício, só nos interessam os algarismos romanos tradicionais, em que o número mais alto é MMMCMXCIX (ou 3 999).

Note

Há muitas formas diferentes de converter entre algarismos árabes e algarismos romanos. Recomendamos que comeces por uma abordagem simples, para te familiarizares com o conceito de algarismos romanos, e que só depois procures métodos mais eficientes.

Certifica-te de que vês o nosso vídeo Deep Dive no final, para explorares as diferentes abordagens que podes seguir!

Adicionar um método à struct Int

Este exercício centra-se em adicionar métodos à struct Int do Crystal. Para isso, tens de definir uma struct com o nome Int. E colocar o método dentro dessa struct.

struct Int
  # your solution here
end

Podes encontrar o código-fonte da classe Int aqui.

Editar via GitHub A ligação abre numa nova janela ou separador
Crystal Exercism

Estás pronto para começar Números romanos?

Inscreve-te no Exercism para aprenderes e dominares Crystal com 26 conceitos142 exercícios, e mentoria humana real, tudo grátis.

Mergulha a fundo em Números romanos!

Explora várias soluções diferentes para este exercício complicado, desde a recursão a consultas baseadas em tabelas, passando por uma solução que recorre a números de base mista e por alguns truques simplistas em Common Lisp.