103 lines
2.6 KiB
Markdown
103 lines
2.6 KiB
Markdown
# Roman Numerals
|
||
|
||
Welcome to Roman Numerals on Exercism's Elixir Track.
|
||
If you need help running the tests or submitting your code, check out `HELP.md`.
|
||
|
||
## Introduction
|
||
|
||
Today, most people in the world use Arabic numerals (0–9).
|
||
But if you travelled back two thousand years, you'd find that most Europeans were using Roman numerals instead.
|
||
|
||
To write a Roman numeral we use the following Latin letters, each of which has a value:
|
||
|
||
| M | D | C | L | X | V | I |
|
||
| ---- | --- | --- | --- | --- | --- | --- |
|
||
| 1000 | 500 | 100 | 50 | 10 | 5 | 1 |
|
||
|
||
A Roman numeral is a sequence of these letters, and its value is the sum of the letters' values.
|
||
For example, `XVIII` has the value 18 (`10 + 5 + 1 + 1 + 1 = 18`).
|
||
|
||
There's one rule that makes things trickier though, and that's that **the same letter cannot be used more than three times in succession**.
|
||
That means that we can't express numbers such as 4 with the seemingly natural `IIII`.
|
||
Instead, for those numbers, we use a subtraction method between two letters.
|
||
So we think of `4` not as `1 + 1 + 1 + 1` but instead as `5 - 1`.
|
||
And slightly confusingly to our modern thinking, we write the smaller number first.
|
||
This applies only in the following cases: 4 (`IV`), 9 (`IX`), 40 (`XL`), 90 (`XC`), 400 (`CD`) and 900 (`CM`).
|
||
|
||
Order matters in Roman numerals!
|
||
Letters (and the special compounds above) must be ordered by decreasing value from left to right.
|
||
|
||
Here are some examples:
|
||
|
||
```text
|
||
105 => CV
|
||
---- => --
|
||
100 => C
|
||
+ 5 => V
|
||
```
|
||
|
||
```text
|
||
106 => CVI
|
||
---- => --
|
||
100 => C
|
||
+ 5 => V
|
||
+ 1 => I
|
||
```
|
||
|
||
```text
|
||
104 => CIV
|
||
---- => ---
|
||
100 => C
|
||
+ 4 => IV
|
||
```
|
||
|
||
And a final more complex example:
|
||
|
||
```text
|
||
1996 => MCMXCVI
|
||
----- => -------
|
||
1000 => M
|
||
+ 900 => CM
|
||
+ 90 => XC
|
||
+ 5 => V
|
||
+ 1 => I
|
||
```
|
||
|
||
## Instructions
|
||
|
||
Your task is to convert a number from Arabic numerals to Roman numerals.
|
||
|
||
For this exercise, we are only concerned about traditional Roman numerals, in which the largest number is MMMCMXCIX (or 3,999).
|
||
|
||
~~~~exercism/note
|
||
There are lots of different ways to convert between Arabic and Roman numerals.
|
||
We recommend taking a naive approach first to familiarise yourself with the concept of Roman numerals and then search for more efficient methods.
|
||
|
||
Make sure to check out our Deep Dive video at the end to explore the different approaches you can take!
|
||
~~~~
|
||
|
||
## Source
|
||
|
||
### Created by
|
||
|
||
- @rubysolo
|
||
|
||
### Contributed to by
|
||
|
||
- @andrewsardone
|
||
- @angelikatyborska
|
||
- @cetinajero
|
||
- @Cohen-Carlisle
|
||
- @dalexj
|
||
- @devonestes
|
||
- @jinyeow
|
||
- @lpil
|
||
- @neenjaw
|
||
- @parkerl
|
||
- @sotojuan
|
||
- @Teapane
|
||
- @waiting-for-dev
|
||
|
||
### Based on
|
||
|
||
The Roman Numeral Kata - https://codingdojo.org/kata/RomanNumerals/ |