ट्रैक
/
Crystal
Crystal
/
अभ्यास
/
Chaitana का विशाल रोलर कोस्टर
Chaitana का विशाल रोलर कोस्टर

Chaitana का विशाल रोलर कोस्टर

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

परिचय

ऐरे एक आम डेटा स्ट्रक्चर है, जिसके साथ काम करना पड़ता है। इनके साथ काम करने के लिए मेथड का एक पूरा समूह मौजूद है। इसमें सॉर्ट करना, उलटना, बीच में जोड़ना और ऐसे ही कई और काम शामिल हैं।

इनमें से कुछ मेथड डेस्ट्रक्टिव होते हैं, यानी वे मूल ऐरे को ही बदल देते हैं। बाकी नॉन-डेस्ट्रक्टिव होते हैं, यानी वे एक नया ऐरे लौटाते हैं और मूल ऐरे को नहीं बदलते।

ऐरे के साथ काम करते समय सबसे ज़्यादा इस्तेमाल होने वाले कुछ मेथड ये हैं:

insert

ऐरे में कोई एलिमेंट जोड़ते समय आप insert मेथड इस्तेमाल कर सकते हैं, जो आर्गुमेंट के रूप में एक इंडेक्स और एक एलिमेंट लेता है। एलिमेंट बताए गए इंडेक्स पर जोड़ दिया जाता है, और ऐरे के बाकी एलिमेंट एक जगह दाईं ओर खिसक जाते हैं। अगर इंडेक्स ऐरे की सीमा से बाहर हो, तो कोड IndexError उठाता है।

numbers = [1, 2, 3]
numbers.insert(1, 4)
numbers # => [1, 4, 2, 3]

numbers.insert(5, 5) # => Error: Index out of bounds (IndexError)

delete

जब आप ऐरे से कोई खास एलिमेंट हटाना चाहते हैं, तो delete मेथड इस्तेमाल कर सकते हैं, जो आर्गुमेंट के रूप में एक एलिमेंट लेता है। यह मेथड हटाया गया एलिमेंट लौटाता है। अगर वह एलिमेंट ऐरे में मौजूद न हो, तो nil लौटता है।

numbers = [1, 2, 3]
numbers.delete(2) # => 2
numbers           # => [1, 3]

first & last

ऐरे का पहला या अंतिम एलिमेंट पाने के लिए आप first और last मेथड इस्तेमाल कर सकते हैं। ये मेथड एक वैकल्पिक आर्गुमेंट लेते हैं, जो बताता है कि कितने एलिमेंट लौटाने हैं। इंडेक्स 0 या -1 इस्तेमाल करने या किसी रेंज का सहारा लेने के मुकाबले ये कोड को पढ़ने में ज़्यादा आसान बनाते हैं। अगर ऐरे खाली हो, तो कोड Enumerable::EmptyError उठाता है।

numbers = [1, 2, 3]
numbers.first # => 1
numbers.last  # => 3

numbers.first(2) # => [1, 2]
numbers.last(2)  # => [2, 3]

empty_array = [] of Int32
empty_array.last # => Error: Empty enumerable (Enumerable::EmptyError)

reverse

ऐरे को उलटने के लिए आप reverse मेथड इस्तेमाल कर सकते हैं, जो एलिमेंट को उल्टे क्रम में रखकर एक नया ऐरे लौटाता है। ध्यान दीजिए कि reverse एक नया ऐरे लौटाता है और मूल ऐरे को नहीं बदलता। अगर आप मूल ऐरे को बदलना चाहते हैं, तो मेथड के नाम के अंत में ! लगाइए।

numbers = [1, 2, 3]
numbers.reverse # => [3, 2, 1]
numbers         # => [1, 2, 3]

numbers.reverse! # => [3, 2, 1]
numbers          # => [3, 2, 1]

Concat(+)

ऐरे में ऑब्जेक्ट जोड़ने के लिए append मेथड (<<) काम आता है। लेकिन जब दो ऐरे जोड़ने हों, तो आप + ऑपरेटर इस्तेमाल कर सकते हैं, जो दोनों ऐरे के एलिमेंट लेकर एक नया ऐरे लौटाता है।

[1, 2] + [3, 4] # => [1, 2, 3, 4]

अगर आप एक ऐरे को दूसरे ऐरे में जोड़ते हैं, तो वह पूरा ऐरे एक ही एलिमेंट के रूप में जुड़ता है।

[1, 2] << [3, 4] # => [1, 2, [3, 4]]

empty?

ऐरे खाली है या नहीं, यह जाँचने के लिए आप empty? मेथड इस्तेमाल कर सकते हैं, जो ऐरे खाली होने पर true और वरना false लौटाता है। ऐरे की लंबाई की 0 से तुलना करने के मुकाबले यह कोड को पढ़ने में ज़्यादा आसान बनाता है।

[].empty? # => true
[1, 2, 3].empty? # => false

index

जब आप ऐरे में किसी एलिमेंट का इंडेक्स जानना चाहते हैं, तो index मेथड इस्तेमाल कर सकते हैं, जो आर्गुमेंट के रूप में एक एलिमेंट लेता है। अगर वह एलिमेंट ऐरे में मौजूद न हो, तो nil लौटता है।

numbers = [1, 2, 3]
numbers.index(2) # => 1

size

जब आप जानना चाहते हैं कि ऐरे में कितने एलिमेंट हैं, तो size मेथड इस्तेमाल कर सकते हैं।

numbers = [1, 2, 3]
numbers.size # => 3

count

जब आप गिनना चाहते हैं कि कोई एलिमेंट ऐरे में कितनी बार मौजूद है, तो count मेथड इस्तेमाल कर सकते हैं।

fruits = ["apple", "banana", "apple"]
fruits.count("apple")      # => 2
fruits.count("banana")     # => 1
fruits.count("watermelon") # => 0

sort

जब आप ऐरे को क्रम में लगाना चाहते हैं, तो sort मेथड इस्तेमाल कर सकते हैं, जो एलिमेंट को क्रम में लगाकर एक नया ऐरे लौटाता है। reverse की तरह यह मेथड भी एक नया ऐरे लौटाता है और मूल ऐरे को नहीं बदलता।

numbers = [3, 2, 1]
numbers.sort # => [1, 2, 3]
numbers      # => [3, 2, 1]

numbers.sort! # => [1, 2, 3]
numbers       # => [1, 2, 3]

निर्देश

Chaitana एक बहुत लोकप्रिय थीम पार्क की मालकिन हैं। सुंदर ढंग से सजे परिसर के ठीक बीच में उनकी सिर्फ एक ही राइड है: दुनिया का सबसे बड़ा रोलर कोस्टर (TM)। हालाँकि यहाँ सिर्फ यही एक आकर्षण है, फिर भी दुनिया भर से लोग आते हैं और Chaitana के हाइपरकोस्टर पर सवार होने का मौका पाने के लिए घंटों कतार में लगे रहते हैं।

इस राइड के लिए दो कतारें हैं, जिनमें से हर एक को एक array से दर्शाया गया है:

  1. सामान्य कतार
  2. एक्सप्रेस कतार (जिसे फास्ट-ट्रैक भी कहते हैं), जहाँ लोग प्राथमिकता से पहुँचने के लिए अतिरिक्त पैसे देते हैं।

आपसे कहा गया है कि पार्क के मेहमानों को बेहतर ढंग से संभालने के लिए कुछ कोड लिखिए। आपको नीचे दिए गए फंक्शन जल्द से जल्द बनाने हैं, इससे पहले कि मेहमान (और आपकी बॉस, Chaitana!) चिड़चिड़े हो जाएँ।

1. कतार में व्यक्ति जोड़िए

ColossalCoaster.add_to_queue मेथड बनाइए, जो 4 आर्गुमेंट <express_queue>, <normal_queue>, <ticket_type>, <person_name> लेता है और व्यक्ति का नाम जोड़कर अपडेट की गई उचित कतार लौटाता है।

  1. <ticket_type> एक Int32 है, जिसमें 1 == express_queue और 0 == normal_queue.
  2. <person_name> उस व्यक्ति का नाम (एक String के रूप में) है जिसे संबंधित कतार में जोड़ना है।
express_queue = ["Tony", "Bruce"]
normal_queue = ["RobotGuy", "WW"]
ColossalCoaster.add_to_queue(express_queue, normal_queue, 1, "RichieRich")
# => ["Tony", "Bruce", "RichieRich"]

2. मेरे दोस्त कहाँ हैं?

एक व्यक्ति पार्क देर से पहुँचा, लेकिन वह उस कतार में लगना चाहता है जहाँ उसके दोस्त इंतज़ार कर रहे हैं। लेकिन उसे पता ही नहीं कि उसके दोस्त कहाँ खड़े हैं, और उन्हें कॉल करने के लिए फोन का सिग्नल भी नहीं है।

ColossalCoaster.find_my_friend मेथड बनाइए, जो 2 आर्गुमेंट queue और friend_name लेता है और कतार में उस व्यक्ति के नाम की जगह लौटाता है।

  1. <queue> कतार में खड़े लोगों का एक array है।
  2. <friend_name> उस दोस्त का नाम है जिसका इंडेक्स (कतार में जगह) आपको ढूँढना है।
ColossalCoaster.find_my_friend(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve")
# => 1

3. क्या मैं भी उनके साथ लग सकता हूँ?

अब जब उनके दोस्त मिल गए हैं (ऊपर कार्य 2 में), तो देर से आया व्यक्ति कतार में उनकी जगह पर उनके साथ लगना चाहता है। ColossalCoaster.add_with_friends मेथड बनाइए, जो 3 आर्गुमेंट queue, friend_name और person_name लेता है।

  1. <queue> कतार में खड़े लोगों का एक array है।
  2. <friend_name> उस दोस्त का नाम है जिसकी जगह पर व्यक्ति को जोड़ना है।
  3. <person_name> उस व्यक्ति का नाम है जिसे उस इंडेक्स की जगह पर जोड़ना है।

देर से आए व्यक्ति का नाम जोड़कर अपडेट की गई कतार लौटाइए।

ColossalCoaster.add_with_friends(["Natasha", "Steve", "T'challa", "Wanda", "Rocket"], "Steve", "Bucky")
# => ["Natasha", "Bucky", "Steve", "T'challa", "Wanda", "Rocket"]

4. कतार में बदतमीज़ व्यक्ति

आपने अभी-अभी कतार से सुना कि वहाँ एक बहुत बदतमीज़ व्यक्ति धक्का दे रहा है, चिल्ला रहा है और झगड़ा कर रहा है। बदसलूकी की वजह से उस बदमाश को बाहर निकाल देना है!

ColossalCoaster.remove_from_queue मेथड बनाइए, जो 2 आर्गुमेंट queue और person_name लेता है।

  1. <queue> कतार में खड़े लोगों का एक array है।
  2. <person_name> उस व्यक्ति का नाम है जिसे बाहर निकालना है।

उस बदतमीज़ व्यक्ति का नाम हटाकर अपडेट की गई कतार लौटाइए।

ColossalCoaster.remove_from_queue(["Natasha", "Steve", "Eltran", "Wanda", "Rocket"], "Eltran")
# => ["Natasha", "Steve", "Wanda", "Rocket"]

5. कतार की सूची को क्रम में लगाइए

प्रशासनिक कामों के लिए, आपको किसी दी गई कतार के सारे नाम वर्णमाला के क्रम में लगाने हैं।

ColossalCoaster.sorted_queue मेथड बनाइए, जो 1 आर्गुमेंट queue (कतार में खड़े लोगों का array) लेता है। मेथड को array की क्रम में लगाई गई एक प्रति लौटानी चाहिए।

ColossalCoaster.sorted_queue(["Natasha", "Steve", "Eltran", "Natasha", "Rocket"])
# => ['Eltran', 'Natasha', 'Natasha', 'Rocket', 'Steve']
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Crystal Exercism

Chaitana का विशाल रोलर कोस्टर शुरू करने के लिए तैयार हैं?

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