ट्रैक
/
Arturo
Arturo
/
अभ्यास
/
रोमन अंक
रोमन अंक

रोमन अंक

मध्यम

परिचय

आज दुनिया में अधिकांश लोग अरबी अंक (0–9) इस्तेमाल करते हैं। लेकिन अगर आप दो हज़ार साल पीछे चले जाएँ, तो पाएँगे कि अधिकांश यूरोपीय लोग इसके बजाय रोमन अंक इस्तेमाल करते थे।

रोमन अंक लिखने के लिए हम निम्नलिखित लैटिन अक्षर इस्तेमाल करते हैं, जिनमें से हर अक्षर की एक वैल्यू होती है:

M D C L X V I
1000 500 100 50 10 5 1

एक रोमन अंक इन अक्षरों का एक क्रम होता है, और उसकी वैल्यू अक्षरों की वैल्यू का जोड़ होती है। उदाहरण के लिए, XVIII की वैल्यू 18 होती है (10 + 5 + 1 + 1 + 1 = 18)।

हालाँकि एक नियम चीज़ों को और मुश्किल बना देता है: एक ही अक्षर लगातार तीन बार से अधिक इस्तेमाल नहीं किया जा सकता। इसका मतलब है कि हम 4 जैसी संख्याओं को उस सहज लगने वाले IIII से नहीं लिख सकते। इसके बजाय, ऐसी संख्याओं के लिए हम दो अक्षरों के बीच घटाने का तरीका इस्तेमाल करते हैं। तो हम 4 को 1 + 1 + 1 + 1 नहीं, बल्कि 5 - 1 के रूप में देखते हैं। और हमारी आधुनिक सोच के लिए थोड़ा उलझाने वाला यह है कि हम छोटी संख्या पहले लिखते हैं। यह केवल इन मामलों में लागू होता है: 4 (IV), 9 (IX), 40 (XL), 90 (XC), 400 (CD) और 900 (CM)।

रोमन अंकों में क्रम मायने रखता है! अक्षरों (और ऊपर दिए गए विशेष संयोजनों) को बाएँ से दाएँ घटती वैल्यू के क्रम में रखना होता है।

यहाँ कुछ उदाहरण दिए गए हैं:

 105 => CV
---- => --
 100 => C
+  5 =>  V
 106 => CVI
---- => --
 100 => C
+  5 =>  V
+  1 =>   I
 104 => CIV
---- => ---
 100 => C
+  4 =>  IV

और अंत में एक अधिक जटिल उदाहरण:

 1996 => MCMXCVI
----- => -------
 1000 => M
+ 900 =>  CM
+  90 =>    XC
+   5 =>      V
+   1 =>       I

निर्देश

आपको एक संख्या को अरबी अंकों से रोमन अंकों में बदलना है।

इस अभ्यास में हमारा ध्यान केवल पारंपरिक रोमन अंकों पर है। इनमें सबसे बड़ी संख्या MMMCMXCIX (या 3,999) है।

Note

अरबी और रोमन अंकों के बीच बदलने के बहुत सारे अलग-अलग तरीके हैं। हम सुझाव देते हैं कि पहले एक सरल तरीका अपनाइए, ताकि आप रोमन अंकों की अवधारणा से परिचित हो जाएँ, और फिर अधिक कुशल तरीके खोजिए।

अंत में हमारे Deep Dive वीडियो को ज़रूर देखिए, ताकि आप जान सकें कि आप कौन-कौन से अलग-अलग तरीके अपना सकते हैं!

Arturo के निर्देश

इस अभ्यास में आपको stringify वर्ड को कॉल करने के दो अलग-अलग तरीकों का समर्थन करना होगा:

  1. roman एट्रिब्यूट के साथ (जैसे stringify.roman 3999)
  2. roman एट्रिब्यूट के बिना (जैसे stringify 3999)

अधिक जानकारी के लिए attributes डॉक्यूमेंटेशन और attr डॉक्यूमेंटेशन देखिए।

Caution

attr के अलावा attrs फंक्शन भी काम का है: यह फंक्शन कॉल के सारे एट्रिब्यूट एक डिक्शनरी के रूप में लौटाता है।

ध्यान रखिए कि ये दोनों फंक्शन डेस्ट्रक्टिव हैं!

Arturo का इम्प्लीमेंटेशन एक "attributes table" इस्तेमाल करता है।

एक उदाहरण:

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

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

इसका आउटपुट यह है:

6 * 9
[answer:42]
[]

हर कदम पर हम देखते हैं कि एट्रिब्यूट डिक्शनरी छोटी होती जाती है।

निष्कर्ष: ध्यान रखिए कि आप एट्रिब्यूट सिर्फ एक बार ही निकाल सकते हैं। अगर आपको एट्रिब्यूट दोबारा देखने की ज़रूरत पड़े, तो उन्हें अपने फंक्शन के शुरू में ही सुरक्षित रख लीजिए।


स्रोत

The Roman Numeral Kataयह लिंक एक नई विंडो या टैब में खुलता है
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Arturo Exercism

रोमन अंक शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Arturo को 79 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।

रोमन अंक को गहराई से जानिए!

इस मुश्किल अभ्यास के अलग-अलग तरह के हल जानिए। इनमें रिकर्शन से लेकर टेबल-आधारित लुकअप तक शामिल हैं, साथ ही एक ऐसा हल जो मिश्रित रेडिक्स संख्याएँ इस्तेमाल करता है, और Common Lisp की थोड़ी-सी सीधी चीटिंग भी।