Gotta Snatch'Em All

Gotta Snatch'Em All

सीखने का अभ्यास

परिचय

सेट

Set a टाइप a की अद्वितीय वैल्यूओं का एक क्रम है। इन वैल्यूओं का टाइप comparable होना ज़रूरी है (Int, Float, Time, Char, String, और comparable टाइप के टपल या ऐरे)।

आप Set.toList और Set.fromList की मदद से ऐरे और सेट को एक-दूसरे में बदल सकते हैं। Set की अंदरूनी संरचना की वजह से यह पक्का है कि Set.fromList से मिला ऐरे क्रमबद्ध होगा।

Set.fromList [2, 3, 3, 3, 1, 1, 2]
    --> Set.fromList [1, 2, 3]

Set.toList (Set.fromList [2, 3, 3, 3, 1, 1, 2])
    --> [1, 2, 3]

आप Set.empty, Set.singleton, Set.insert और Set.remove की मदद से सेट बना सकते हैं और उनमें वैल्यू भर सकते हैं।

Set.empty
    --> Set.fromList []

Set.singleton "hi"
    --> Set.fromList ["hi"]

eightyEight = Set.singleton 88

Set.insert 88 eightyEight
    --> Set.fromList [88]

Set.insert 89 eightyEight
    --> Set.fromList [88, 89]

Set.remove 88 eightyEight
    --> Set.fromList []

Set.remove 89 eightyEight
    --> Set.fromList [88]

आप Set.member, Set.isEmpty और Set.size फंक्शन की मदद से सेट के अंदर की वैल्यूओं के बारे में जान सकते हैं।

Set.member 88 eightyEight
    --> True

Set.isEmpty eightyEight
    --> False

Set.size eightyEight
    --> 1

सेट को Set.union, Set.intersect और Set.diff की मदद से जोड़ा जा सकता है।

a = Set.fromList [1, 10, 100]
b = Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Set.union a b
    --> Set.fromList [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100]

Set.intersect a b
    --> Set.fromList [1, 10]

Set.diff a b
    --> Set.fromList [100]

Set.diff b a
    --> Set.fromList [2, 3, 4, 5, 6, 7, 8, 9]

आप सेट को छान सकते हैं और बाँट सकते हैं।

even n = modBy 2 n == 0

Set.filter even b
    --> Set.fromList [2, 4, 6, 8, 10]

Set.partition even b
    --> (Set.fromList [2, 4, 6, 8, 10], Set.fromList [1, 3, 5, 7, 9])

निर्देश

Blorkemon™️ कार्डों के लिए आपकी पुरानी यादों का जोश अभी थमने का नाम नहीं ले रहा। आपने तो उन्हें फिर से इकट्ठा करना शुरू कर दिया है और अपने दोस्तों को भी अपने साथ जोड़ रहे हैं।

इस अभ्यास में Card के कलेक्शन को Set Card से दर्शाया जाता है, क्योंकि जब आपका लक्ष्य सभी मौजूद कार्ड इकट्ठा करना हो, तो एक जैसे कार्ड मायने नहीं रखते।

1. कलेक्शन शुरू कीजिए

आप चाहते हैं कि आपके दोस्त भी आपके Blorkemon™️ के जुनून में शामिल हों, और इसका सबसे अच्छा तरीका यह है कि आप उन्हें एक कार्ड देकर उनका कलेक्शन शुरू करा दें।

newCollection बनाइए, जो एक कार्ड को कलेक्शन में बदल देता है।

newCollection "Newthree"
    --> Set.fromList ["Newthree"]

2. कलेक्शन बढ़ाइए

कलेक्शन बन जाने के बाद वह अपनी अलग ज़िंदगी जीने लगता है, इसलिए उसे बढ़ाना ज़रूरी है।

addCard बनाइए, जो एक Card और एक कलेक्शन लेता है, और दो वैल्यू वाला एक Tuple लौटाता है: एक Bool, जो बताता है कि वह Card पहले से कलेक्शन में था या नहीं, और वह कलेक्शन जिसमें कार्ड जोड़ दिया गया है।

addCard "Scientuna" (Set.fromList ["Newthree"])
    --> (False, Set.fromList ["Newthree", "Scientuna"])

3. अदला-बदली शुरू कीजिए

अब जब आपके दोस्त फिर से Blorkemon™️ के दीवाने हो गए हैं, तो आप कार्डों की अदला-बदली करके अपना कलेक्शन बढ़ा सकते हैं।

हर अदला-बदली करने लायक नहीं होती, और हर अदला-बदली हो ही नहीं सकती। जो कार्ड आपके पास नहीं है, उसकी अदला-बदली आप नहीं कर सकते, और जो कार्ड आपके पास पहले से है, उसके लिए किसी कार्ड की अदला-बदली आपको नहीं करनी चाहिए।

tradeCard बनाइए, जो अदला-बदली के लिए दो कार्ड (आपका और उनका) और आपका मौजूदा कलेक्शन लेता है। इसका रिटर्न वैल्यू दो वैल्यू वाला एक Tuple है: एक Bool, जो बताता है कि अदला-बदली संभव है और करने लायक है या नहीं, और वह कलेक्शन जो अदला-बदली करने पर आपके पास होता (भले ही वह वास्तव में संभव न हो)।

tradeCard "Scientuna" "Newthree" (Set.fromList ["Scientuna"])
    --> (True, Set.fromList ["Newthree"])

4. हर कार्ड की सिर्फ एक ही प्रति हो सकती है

आपको एक रेहड़ी बाज़ार में कार्डों का पुराना ढेर मिलता है। आपको कार्डों को क्रम में लगाना है और दोहराए गए कार्ड हटाने हैं, ताकि आप उस ऐरे की तुलना अपने कलेक्शन से कर सकें।

removeDuplicates बनाइए, जो कार्डों के एक ऐरे को क्रम में लगाएगा और क्रम में लगे, अनोखे कार्डों का एक ऐरे लौटाएगा।

removeDuplicates ["Newthree", "Newthree", "Newthree", "Scientuna"]
    --> ["Newthree", "Scientuna"]

5. जो कार्ड उनके पास नहीं हैं

अब अपने कलेक्शन के बारे में अच्छा महसूस करने का समय है।

extraCards बनाइए, जो आपका कलेक्शन और कोई दूसरा कलेक्शन लेता है, और उन कार्डों की संख्या लौटाता है जो उस दूसरे कलेक्शन में नहीं हैं।

extraCards (Set.fromList ["Scientuna"]) (Set.fromList ["Newthree", "Scientuna"])
    --> 0

6. जो कार्ड सबके पास हैं

आप और आपके Blorkemon™️ के शौकीन दोस्त इकट्ठा होते हैं और सोचते हैं कि सबसे ज़्यादा कौन-से कार्ड हैं।

boringCards बनाइए, जो कलेक्शनों का एक ऐरे लेता है और क्रम में लगे उन कार्डों का एक ऐरे लौटाता है जो सभी कलेक्शनों में हैं।

boringCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
    --> ["Scientuna"]

7. सारे कार्ड

क्या आपके और आपके दोस्तों के पास मिलकर सारे Blorkemon™️ कार्ड हैं?

totalCards बनाइए, जो कलेक्शनों का एक ऐरे लेता है और सभी कलेक्शनों में मौजूद अलग-अलग कार्डों की कुल संख्या लौटाता है।

totalCards [Set.fromList ["Scientuna"], Set.fromList ["Newthree", "Scientuna"]]
    --> 2

8. जीत के लिए शाइनी

आपका भतीजा जल्द ही आपसे मिलने आ रहा है, और आप उसे प्रभावित करना चाहते हैं। बच्चों को चमकीली चीज़ें पसंद होती हैं, है ना? Blorkemon™️ कार्ड चमकीले हो सकते हैं!

splitShinyCards बनाइए, जो एक कलेक्शन लेता है और क्रम में लगे कार्डों के दो ऐरे वाला एक Tuple लौटाता है: एक में वे सारे कार्ड जो "Shiny" से शुरू होते हैं, और दूसरे में बाकी कार्ड।

splitShinyCards (Set.fromList ["Newthree", "Scientuna", "Shiny Scientuna"])
    --> (["Shiny Scientuna"], ["Newthree", "Scientuna"])
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Elm Exercism

Gotta Snatch'Em All शुरू करने के लिए तैयार हैं?

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