Ma a világon a legtöbb ember arab számokat használ (0–9). Ha azonban kétezer évet visszautaznál az időben, azt tapasztalnád, hogy a legtöbb európai akkoriban római számokat használt.
Egy római szám leírásához a következő latin betűket használjuk, amelyek mindegyike egy-egy értéket jelöl:
| M | D | C | L | X | V | I |
|---|---|---|---|---|---|---|
| 1000 | 500 | 100 | 50 | 10 | 5 | 1 |
A római szám ezeknek a betűknek a sorozata, az értéke pedig a betűk értékeinek összege.
Például az XVIII értéke 18 (10 + 5 + 1 + 1 + 1 = 18).
Van azonban egy szabály, ami megnehezíti a dolgot: ugyanaz a betű nem szerepelhet egymás után háromnál többször.
Ez azt jelenti, hogy az olyan számokat, mint a 4, nem írhatjuk le a kézenfekvőnek tűnő IIII-gyel.
Helyette ezeknél a számoknál két betű közötti kivonást használunk.
A 4-re tehát nem úgy gondolunk, mint 1 + 1 + 1 + 1, hanem úgy, mint 5 - 1.
És ami a mai gondolkodásunknak kicsit zavaró lehet, a kisebb számot írjuk előre.
Ez csak a következő esetekben érvényes: 4 (IV), 9 (IX), 40 (XL), 90 (XC), 400 (CD) és 900 (CM).
A római számoknál számít a sorrend! A betűket (és a fenti különleges összetételeket) balról jobbra haladva csökkenő érték szerint kell sorrendbe rakni.
Íme néhány példa:
105 => CV
---- => --
100 => C
+ 5 => V
106 => CVI
---- => --
100 => C
+ 5 => V
+ 1 => I
104 => CIV
---- => ---
100 => C
+ 4 => IV
És végül egy összetettebb példa:
1996 => MCMXCVI
----- => -------
1000 => M
+ 900 => CM
+ 90 => XC
+ 5 => V
+ 1 => I
A feladatod, hogy egy számot arab számjegyekből római számjegyekké alakíts.
Ebben a feladatban csak a hagyományos római számjegyekkel foglalkozunk, amelyeknél a legnagyobb szám a MMMCMXCIX (vagyis 3999).
Sok különböző módja van az arab és a római számjegyek közötti átváltásnak. Azt javasoljuk, hogy először egy naiv megközelítéssel ismerkedj meg a római számjegyek fogalmával, és csak utána keress hatékonyabb módszereket.
Feltétlenül nézd meg a végén található mélyelemzés videónkat, hogy megismerd a lehetséges megközelítéseket!
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Pyret nyelvet 66 feladat segítségével, valódi emberi mentorálással, mindez ingyen.
Fedezz fel sokféle megoldást erre a trükkös feladatra, a rekurziótól a táblázatalapú kereséseken át egy vegyes számrendszert alkalmazó megoldásig, valamint a Common Lisp némi egyszerű csalásáig.