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

रोमन अंक

मध्यम

परिचय

आज दुनिया में अधिकांश लोग अरबी अंक (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 वीडियो को ज़रूर देखिए, ताकि आप जान सकें कि आप कौन-कौन से अलग-अलग तरीके अपना सकते हैं!

ट्रैक के लिए विशेष निर्देश

कुछ अलग करने के लिए आप unfold फंक्शन वाला हल भी आज़मा सकते हैं। आप शायद foldLeft/Right से पहले से परिचित हैं। ये किसी पूरे कोलेक्शन को "मैप" करके किसी और चीज़ में बदल देते हैं, आम तौर पर ऐसी चीज़ में जो खुद कोलेक्शन न हो। unfoldLeft/Right इसके उलटा काम करते हैं। ये किसी चीज़ को, आम तौर पर किसी ऐसी चीज़ को जो कोलेक्शन न हो, "मैप" करके कोलेक्शन बना देते हैं। इसलिए unfold करना FP की मानक तकनीकों का एक स्वाभाविक हिस्सा है।

इस अभ्यास को unfold करने का एक उदाहरण माना जा सकता है: एक Int को "मैप" करके String बनाना, जो निश्चित रूप से परोक्ष रूप से एक Seq[Char] ही है।

दुर्भाग्य से unfoldLeft/Right Scala की कोलेक्शन लाइब्रेरी में शामिल नहीं है। लेकिन आप इसका कार्यान्वयन यहाँ से ले सकते हैं।


स्रोत

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

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

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

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

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