Kurzusok
/
Arturo
Arturo
/
Feladatok
/
Római számok
Római számok

Római számok

Közepes

Bevezetés

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

Utasítások

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).

Note

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!

Arturo-útmutató

Ehhez a feladathoz a stringify szó két különböző meghívási módját kell támogatnod:

  1. A roman attribútummal (pl. stringify.roman 3999)
  2. A roman attribútum nélkül (pl. stringify 3999)

További információért nézd meg az attribútumok dokumentációt, valamint az attr dokumentációt.

Caution

Az attr mellett hasznos lehet az attrs függvény is: a függvényhívás összes attribútumát szótárként adja vissza.

Vigyázz, ez a két függvény destruktív hatású!

Az Arturo megvalósítása egy „attribútumtáblát” használ.

Egy példa:

showAttributes: function [x][
    print attr 'question
    print attrs
    print attrs
]

showAttributes .question:"6 * 9" .answer:42 'arg

kimenete

6 * 9
[answer:42]
[]

Mindegyik lépésnél látjuk, ahogy zsugorodik az attribútumszótár.

Következtetés: tartsd észben, hogy az attribútumokat csak egyszer tudod lekérni. Ha később hivatkozni szeretnél rájuk, a függvényeid elején mentsd el őket.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Arturo Exercism

Készen állsz elkezdeni a(z) Római számok feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Arturo nyelvet 79 feladat segítségével, valódi emberi mentorálással, mindez ingyen.

Mélyelemzés: Római számok!

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.