ट्रैक
/
Julia
Julia
/
अभ्यास
/
टिसबरी खज़ाने की खोज
टिसबरी खज़ाने की खोज

टिसबरी खज़ाने की खोज

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

परिचय

Tuple कई मामलों में Vector (1-D array) से काफी मिलता-जुलता है। लेकिन दोनों में कुछ ज़रूरी अंतर भी हैं।

  • टपल चौकोर ब्रैकेट [ ] की जगह गोल ब्रैकेट ( ) में लिखे जाते हैं, हालाँकि जहाँ अर्थ स्पष्ट हो वहाँ गोल ब्रैकेट छोड़े जा सकते हैं।
  • टपल के सारे एलिमेंट एक ही टाइप के होना ज़रूरी नहीं है: हर एलिमेंट का टाइप अलग से संग्रहीत किया जाता है।
  • टपल अपरिवर्तनीय होते हैं।

अपरिवर्तनीयता की वजह से कंपाइलर ज़्यादा ऑप्टिमाइज़ेशन कर पाता है। इससे टपल, वेक्टर के मुकाबले बेहतर प्रदर्शन देते हैं। इसलिए जहाँ बदलाव की ज़रूरत न हो, वहाँ टपल को प्राथमिकता देनी चाहिए।

julia> t = (3, 5.2, "xyz")
(3, 5.2, "xyz")

# Non-homogeneous:
julia> dump(t)
Tuple{Int64, Float64, String}
  1: Int64 3
  2: Float64 5.2
  3: String "xyz"

julia> t[2]
5.2

# Immutable:
julia> t[2] = 7.3
ERROR: MethodError: no method matching setindex!(::Tuple{Int64, Float64, String})

एक Tuple() कंस्ट्रक्टर भी है, जो किसी भी इटरेबल कलेक्शन को टपल में बदल देता है। काम की बात यह है कि यह स्ट्रिंग को अक्षरों के एक इटरेबल कलेक्शन की तरह मानता है।

julia> Tuple("Julia")
('J', 'u', 'l', 'i', 'a')

किसी भी टपल में आप इंडेक्स के ज़रिए एलिमेंट ऐक्सेस कर सकते हैं या उन पर लूप चला सकते हैं।

जिस टपल में सिर्फ संख्याएँ हों, उसे sum() जैसे गणितीय फंक्शन में भी इस्तेमाल किया जा सकता है, बिल्कुल ऐरे की तरह।

अनपैकिंग

मल्टीपल असाइनमेंट की मदद से एक टपल को अलग-अलग एलिमेंट में बाँटा जा सकता है। जिन एलिमेंटों की ज़रूरत न हो, उनके लिए डमी वेरिएबल के तौर पर अंडरस्कोर _ इस्तेमाल कीजिए।

julia> tup = (1, "Julia", true)
(1, "Julia", true)

julia> num, name, _ = tup
(1, "Julia", true)

julia> uppercase(name), 2num
("JULIA", 2)

Python प्रोग्रामर इस मल्टीपल-असाइनमेंट सिंटैक्स से भली-भाँति परिचित होंगे।

नेम्ड टपल

Tuple में सिर्फ वैल्यू होती हैं। NamedTuple हर वैल्यू के साथ एक नाम जोड़ता है।

इसके बाद हर फील्ड को "डॉट" नोटेशन से ऐक्सेस किया जा सकता है:

julia> nt = (a = 1, b = 7.3)
(a = 1, b = 7.3)

julia> dump(nt)
@NamedTuple{a::Int64, b::Float64}
  a: Int64 1
  b: Float64 7.3

julia> nt.b
7.3

नाम को अंदर ही अंदर Symbol के रूप में संग्रहीत किया जाता है (Symbol एक अपरिवर्तनीय टाइप है, जिसके आगे कोलन : लगाया जाता है), इसलिए एक और सिंटैक्स भी उपलब्ध है:

julia> nt[:b]
7.3

नाम (जिन्हें "की" भी कहा जाता है) या वैल्यू, दोनों को अलग-अलग निकालना आसान है:

julia> nt
(a = 1, b = 7.3)

julia> keys(nt)
(:a, :b)

julia> values(nt)
(1, 7.3)

ध्यान दीजिए कि नेम्ड टपल पर इटरेशन करने से सिर्फ वैल्यू मिलती हैं, नाम अनदेखा कर दिए जाते हैं।

टपल (नेम्ड हों या न हों) फंक्शन को स्ट्रक्चर्ड डेटा भेजने और फंक्शन से वापस लाने का बहुत आम तरीका है। ऐसे इस्तेमाल में अपरिवर्तनीयता फायदेमंद है, क्योंकि इससे डेटा सुरक्षित रहता है और कंपाइलर ज़्यादा आक्रामक ऑप्टिमाइज़ेशन कर पाता है।

निर्देश

अज़ारा और रुई साथी हैं जो समुद्री डाकुओं की थीम वाली एक खज़ाने की खोज में मुकाबला कर रहे हैं। एक के पास नक्शे के निर्देशांकों के साथ खज़ानों की सूची है, और दूसरे के पास नक्शे के निर्देशांकों के साथ जगहों के नामों की सूची है। उन्हें खाली नक्शे भी दिए गए हैं जिनमें शुरुआत की जगह पर YOU ARE HERE लिखा हुआ है।

अज़ारा की सूची रुई की सूची
खज़ाना निर्देशांक
Amethyst Octopus 1F
Angry Monkey Figurine 5B
Antique Glass Fishnet Float 3D
Brass Spyglass 4B
Carved Wooden Elephant 8C
Crystal Crab 6A
Glass Starfish 6D
Model Ship in Large Bottle 8A
Pirate Flag 7F
Robot Parrot 1C
Scrimshaw Whale's Tooth 2A
Silver Seahorse 4E
Vintage Pirate Hat 7E
जगह का नाम निर्देशांक चतुर्थांश
Seaside Cottages ('1', 'C') Blue
Aqua Lagoon (Island of Mystery) ('1', 'F') Yellow
Deserted Docks ('2', 'A') Blue
Spiky Rocks ('3', 'D') Yellow
Abandoned Lighthouse ('4', 'B') Blue
Hidden Spring (Island of Mystery) ('4', 'E') Yellow
Stormy Breakwater ('5', 'B') Purple
Old Schooner ('6', 'A') Purple
Tangled Seaweed Patch ('6', 'D') Orange
Quiet Inlet (Island of Mystery) ('7', 'E') Orange
Windswept Hilltop (Island of Mystery) ('7', 'F') Orange
Harbor Managers Office ('8', 'A') Purple
Foggy Seacave ('8', 'C') Purple

लेकिन चीज़ें थोड़ी अव्यवस्थित हैं: अज़ारा के निर्देशांक रुई के निर्देशांकों से अलग ढंग से लिखे और क्रम में लगे दिखते हैं, और कौन-सा खज़ाना किस जगह के साथ जाता है यह पता करने के लिए उन्हें बार-बार एक सूची से दूसरी सूची देखनी पड़ती है। Julia के नए-नए प्रोग्रामर होने के नाते वे आपके पास मदद के लिए आए हैं, ताकि वे अपनी खोज की जानकारी को बेहतर ढंग से व्यवस्थित करने के लिए एक छोटा प्रोग्राम (वास्तव में कुछ फंक्शन) लिख सकें।

1. निर्देशांक निकालिए

get_cooordinate() फंक्शन बनाइए जो अज़ारा की सूची से एक (treasure, coordinate) जोड़ा लेता है और सिर्फ निकाला गया नक्शे का निर्देशांक लौटाता है।

julia> get_cooordinate( ("Scrimshaw Whale's Tooth", "2A") )
"2A"

2. निर्देशांक का प्रारूप बदलिए

convert_coordinate() फंक्शन बनाइए जो "2A" प्रारूप वाला एक निर्देशांक लेता है और ('2', 'A') प्रारूप वाला एक टपल लौटाता है।

julia> convert_coordinate("2A")
('2', 'A')

3. निर्देशांक मिलाइए

compare_records() फंक्शन बनाइए जो एक (treasure, coordinate) जोड़ा और एक (location, coordinate, quadrant) रिकॉर्ड लेता है और दोनों के निर्देशांकों की तुलना करता है। अगर निर्देशांक "मेल खाते" हैं तो true लौटाइए, और अगर नहीं मिलते तो false लौटाइए। सटीक तुलना के लिए ज़रूरत के अनुसार निर्देशांकों का प्रारूप दोबारा बदलिए।

julia> compare_records(("Brass Spyglass", "4B"), ("Seaside Cottages", ('1', 'C'), "blue"))
false

julia> compare_records(("Model Ship in Large Bottle", "8A"), ("Harbor Managers Office", ('8', 'A'), "purple"))
true

4. मिलते रिकॉर्ड जोड़िए

create_record() फंक्शन बनाइए जो अज़ारा की सूची से एक (treasure, coordinate) जोड़ा और रुई की सूची से एक (location, coordinate, quadrant) रिकॉर्ड लेता है और अगर निर्देशांक मेल खाते हैं तो (coordinate, location, quadrant, treasure) लौटाता है।

अगर निर्देशांक मेल नहीं खाते, तो एक खाली टपल लौटाइए। सटीक तुलना के लिए ज़रूरत के अनुसार निर्देशांकों का प्रारूप दोबारा बदलिए।

julia> create_record(("Brass Spyglass", "4B"), ("Abandoned Lighthouse", ('4', 'B'), "Blue"))
("4B", "Abandoned Lighthouse", "Blue", "Brass Spyglass")

julia> create_record(("Brass Spyglass", "4B"), ("Seaside Cottages", ('1', 'C'), "Blue"))
()
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Julia Exercism

टिसबरी खज़ाने की खोज शुरू करने के लिए तैयार हैं?

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