ट्रैक
/
Julia
Julia
/
अभ्यास
/
कैटर वेटर
कैटर वेटर

कैटर वेटर

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

परिचय

एक Set चीज़ों का संग्रह है, जिसमें ये गुण होते हैं:

  • इसमें कोई क्रम नहीं होता।
  • हर एंट्री अलग होती है, इसलिए एक ही एंट्री दोबारा जोड़ने की कोशिश चुपचाप अनदेखी कर दी जाती है।
  • गणित के समुच्चयों में आम तौर पर होने वाली कई संक्रियाओं का समर्थन करता है।

इन्हें Set() कंस्ट्रक्टर से बनाइए, और पैरामीटर के तौर पर कोई भी इटरेटर दीजिए।

julia> s1 = Set(1:4)
Set([4, 2, 3, 1])

नए एलिमेंट push!() से जोड़िए (जैसे ऐरे में जोड़ते हैं), और उन्हें delete!() से हटाइए।

julia> push!(s1, 5)
Set([5, 4, 2, 3, 1])

# Duplicates are ignored
julia> push!(s1, 3)
Set([5, 4, 2, 3, 1])

julia> delete!(s1, 5)
Set([4, 2, 3, 1])

julia> length(s1)  # length counts entries, despite the non-sequential type
4

सेट की संक्रियाएँ

कई अन्य संग्रह प्रकारों की तरह, सदस्यता की जाँच in या ∈ ऑपरेटर से कीजिए (चिह्न के लिए \in लिखकर टैब दबाइए)।

julia> 3 ∈ s1
true

सेट के जोड़ों पर ये संक्रियाएँ की जा सकती हैं (ऑपरेटर चिह्न के शॉर्टकट कोष्ठक में दिखाए गए हैं)।

  • union(A, B) या A ∪ B (\cup): A में, B में, या दोनों में मौजूद सारी एंट्रियाँ।
  • intersect(A, B) या A ∩ B (\cap): A और B, दोनों में मौजूद सारी एंट्रियाँ।
  • setdiff(A, B) (कोई चिह्न नहीं): वे एंट्रियाँ जो A में हैं, पर B में नहीं।
  • symdiff(A, B) (कोई चिह्न नहीं): वे एंट्रियाँ जो A या B में से किसी एक में हैं, दोनों में नहीं।
  • issubset(A, B) या A ⊆ B (\subseteq) या B ⊇ A (\supseteq): true, अगर A की सारी एंट्रियाँ B में भी हैं।
  • issetequal(A, B) (कोई चिह्न नहीं): true, अगर A और B में ठीक वही एंट्रियाँ हैं।
  • isdisjoint(A, B) (कोई चिह्न नहीं): true, अगर A और B में कोई एंट्री साझा नहीं है (यानी इनका प्रतिच्छेद खाली होता है)।
julia> s1 = Set(1:4);
julia> s2 = Set(3:6);
julia> s1 ∪ s2  # union
Set([5, 4, 6, 2, 3, 1])

julia> s1 ∩ s2  # intersect
Set([4, 3])
  
julia> setdiff(s1, s2)
Set([2, 1])

julia> symdiff(s1, s2)
Set([5, 6, 2, 1])
  
julia> s1 ⊇ s2  # issubset
false

इनमें से कई के बदलाव करने वाले रूप भी होते हैं, जिनमें फंक्शन नाम के आगे ! लगा दिया जाता है। फंक्शनों की पूरी सूची के लिए मैनुअल देखिए।

निर्देश

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

1. पकवान की सामग्री साफ कीजिए

कार्यक्रम की रेसिपियाँ अलग-अलग स्रोतों से जोड़ी गई थीं, और उनकी सामग्री की सूची में दोहरी (या उससे भी ज़्यादा) प्रविष्टियाँ दिखती हैं। आप नहीं चाहेंगे कि अंत में आपको ज़रूरत से ज़्यादा चीज़ें खरीदनी पड़ें! खरीदारी और पकाना शुरू करने से पहले हर पकवान की सामग्री की सूची को "साफ" करना ज़रूरी है।

clean_ingredients(dish_name, dish_ingredients) फंक्शन बनाइए, जो एक पकवान का नाम और सामग्री का Vector लेता है। यह फंक्शन एक Tuple लौटाना चाहिए, जिसमें पहले पकवान का नाम हो और उसके बाद सामग्री का बिना दोहराव वाला Set हो।

julia> clean_ingredients("Punjabi-Style Chole", ["onions", "tomatoes", "ginger paste", "garlic paste", "ginger paste", "vegetable oil", "bay leaves", "cloves", "cardamom", "cilantro", "peppercorns", "cumin powder", "chickpeas", "coriander powder", "red chili powder", "ground turmeric", "garam masala", "chickpeas", "ginger", "cilantro"])
("Punjabi-Style Chole", Set(["garam masala", "bay leaves", "ground turmeric", "ginger", "garlic paste", "peppercorns", "ginger paste", "red chili powder", "cardamom", "chickpeas", "cumin powder", "vegetable oil", "tomatoes", "coriander powder", "onions", "cilantro", "cloves"]))

2. कॉकटेल और मॉकटेल

इस कार्यक्रम में कॉकटेल और "मॉकटेल" दोनों होंगे, यानी ऐसे मिश्रित पेय जिनमें अल्कोहल नहीं होता। आपको यह पक्का करना है कि "मॉकटेल" पेय सचमुच बिना अल्कोहल हों और कॉकटेल में अल्कोहल ज़रूर हो।

check_drinks(drink_name, drink_ingredients) फंक्शन बनाइए, जो एक ड्रिंक का नाम और सामग्री का एक Vector लेता है। यह फंक्शन ड्रिंक का नाम लौटाएगा और उसके बाद "Mocktail", अगर ड्रिंक में अल्कोहल वाली कोई सामग्री नहीं है; और ड्रिंक का नाम और उसके बाद "Cocktail", अगर ड्रिंक में अल्कोहल है। इस अभ्यास के उद्देश्य से, कॉकटेल में सिर्फ ALCOHOLS कॉन्स्टेंट से आने वाले अल्कोहल ही शामिल माने जाएँगे:

julia> check_drinks("Honeydew Cucumber", ["honeydew", "coconut water", "mint leaves", "lime juice", "salt", "english cucumber"])
"Honeydew Cucumber Mocktail"

julia> check_drinks("Shirley Tonic", ["cinnamon stick", "scotch", "whole cloves", "ginger", "pomegranate juice", "sugar", "club soda"])
"Shirley Tonic Cocktail"

3. पकवानों को श्रेणियों में बाँटिए

मेहमानों की सूची में अलग-अलग खान-पान की ज़रूरतों वाले लोग हैं, और आपके स्टाफ को पकवानों को Vegan, Vegetarian, Paleo, Keto और Omnivore में बाँटना होगा।

categorize_dish(dish_name, dish_ingredients) फंक्शन बनाइए, जो एक पकवान का नाम और उस पकवान की सामग्री का set लेता है। यह फंक्शन एक String लौटाना चाहिए, जिसमें dish name: CATEGORY हो (यानी यह पकवान किस भोजन श्रेणी में आता है)। हर पकवान इन श्रेणियों में से एक में "फिट" होगा: VEGAN, VEGETARIAN, PALEO, KETO या OMNIVORE।

julia> categorize_dish("Sticky Lemon Tofu", Set(["tofu", "soy sauce", "salt", "black pepper", "cornstarch", "vegetable oil", "garlic", "ginger", "water", "vegetable stock", "lemon juice", "lemon zest", "sugar"]))
"Sticky Lemon Tofu: VEGAN"

julia> categorize_dish("Shrimp Bacon and Crispy Chickpea Tacos with Salsa de Guacamole", Set(["shrimp", "bacon", "avocado", "chickpeas", "fresh tortillas", "sea salt", "guajillo chile", "slivered almonds", "olive oil", "butter", "black pepper", "garlic", "onion"]))
"Shrimp Bacon and Crispy Chickpea Tacos with Salsa de Guacamole: OMNIVORE"

4. एलर्जी कारकों और प्रतिबंधित खाद्य पदार्थों को चिह्नित कीजिए

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

tag_special_ingredients(dish) फंक्शन बनाइए, जो एक Tuple लेता है, जिसमें पहली जगह पकवान का नाम हो और दूसरी जगह उस पकवान की सामग्री का Vector या Set हो। पकवान का नाम लौटाइए और उसके बाद उन सामग्री का Set लौटाइए जिनके लिए पकवान के विवरण में एक खास नोट ज़रूरी होता है। Vector के अंदर की पकवान सामग्री में दोहराव हो भी सकता है और नहीं भी। इस अभ्यास के उद्देश्य से, जिन एलर्जी कारकों या खास सामग्री को चिह्नित करना ज़रूरी है, वे सब SPECIAL_INGREDIENTS कॉन्स्टेंट में हैं।

julia> tag_special_ingredients(("Ginger Glazed Tofu Cutlets", ["tofu", "soy sauce", "ginger", "corn starch", "garlic", "brown sugar", "sesame seeds", "lemon juice"]))
("Ginger Glazed Tofu Cutlets", Set(["garlic","soy sauce","tofu"]))

julia> tag_special_ingredients(("Arugula and Roasted Pork Salad", ["pork tenderloin", "arugula", "pears", "blue cheese", "pine nuts", "balsamic vinegar", "onions", "black pepper"
]))
("Arugula and Roasted Pork Salad", Set(["pork tenderloin", "blue cheese", "pine nuts", "onions"]))

5. सामग्री की "मुख्य सूची" तैयार कीजिए

ऑर्डर देने और खरीदारी की तैयारी में, आपको मेन्यू की हर चीज़ के लिए सामग्री की एक "मुख्य सूची" तैयार करनी होगी (मात्राएँ बाद में भरी जाएँगी)।

compile_ingredients(dishes) फंक्शन बनाइए, जो पकवानों का एक Vector लेता है और सूचीबद्ध सभी पकवानों की सारी सामग्री का एक सेट लौटाता है। हर पकवान को उसकी सामग्री के Set से दर्शाया जाता है।

julia> dishes = [Set(["tofu", "soy sauce", "ginger", "corn starch", "garlic", "brown sugar", "sesame seeds", "lemon juice"]), Set(["pork tenderloin", "arugula", "pears", "blue cheese", "pine nuts","balsamic vinegar", "onions", "black pepper"]), Set(["honeydew", "coconut water", "mint leaves", "lime juice", "salt", "english cucumber"])];

julia> compile_ingredients(dishes)
Set(["arugula", "brown sugar", "honeydew", "coconut water", "english cucumber", "balsamic vinegar", "mint leaves", "pears", "pork tenderloin", "ginger", "blue cheese", "soy sauce", "sesame seeds", "black pepper", "garlic", "lime juice", "corn starch", "pine nuts", "lemon juice", "onions", "salt", "tofu"])

6. ट्रे पर परोसने के लिए ऐपेटाइज़र अलग कीजिए

मेज़बानों ने आपको उन पकवानों की सूची दी है जिन्हें वे ट्रे पर परोसने के लिए "एक-एक कौर के" ऐपेटाइज़र के रूप में तैयार कराना चाहते हैं। आपको इन्हें उन मुख्य पकवानों की सूची से अलग करना है जो बड़ी मात्रा में परोसे जाने के लिए बनाए जा रहे हैं।

separate_appetizers(dishes, appetizers) फंक्शन बनाइए, जो पकवानों के नामों का एक Vector और ऐपेटाइज़र के नामों का एक Vector लेता है। यह फंक्शन एक Vector लौटाना चाहिए जिसमें वे पकवानों के नाम हों जिनमें से ऐपेटाइज़र के नाम हटा दिए गए हैं। dishes या appetizers Vector में दोहराव हो सकता है और बिना दोहराव करने की ज़रूरत पड़ सकती है।

julia> dishes = ["Avocado Deviled Eggs","Flank Steak with Chimichurri and Asparagus", "Kingfish Lettuce Cups", "Grilled Flank Steak with Caesar Salad","Vegetarian Khoresh Bademjan","Avocado Deviled Eggs", "Barley Risotto","Kingfish Lettuce Cups"];
          
julia> appetizers = ["Kingfish Lettuce Cups","Avocado Deviled Eggs","Satay Steak Skewers", "Dahi Puri with Black Chickpeas","Avocado Deviled Eggs","Asparagus Puffs", "Asparagus Puffs"];
              
julia> separate_appetizers(dishes, appetizers)
["Vegetarian Khoresh Bademjan", "Barley Risotto", "Flank Steak with Chimichurri and Asparagus", "Grilled Flank Steak with Caesar Salad"]

7. ऐसी सामग्री ढूँढिए जो सिर्फ एक रेसिपी में इस्तेमाल होती है

हर श्रेणी (VEGAN, VEGETARIAN, PALEO, KETO या OMNIVORE) में आप ऐसी सामग्री अलग करेंगे जो सिर्फ एक ही पकवान में आती है। इन "सिंगलटन" सामग्री को एक खास खरीदार सौंपा जाएगा, ताकि बाकी सब काम की जल्दबाज़ी में ये भूल न जाएँ।

singleton_ingredients(dishes, intersection) फंक्शन बनाइए, जो पकवानों का एक Vector और उसी श्रेणी के लिए एक CATEGORY_INTERSECTION कॉन्स्टेंट लेता है। हर पकवान को उसकी सामग्री के Set से दर्शाया जाता है। हर CATEGORY_INTERSECTION उन सामग्री का एक Set होता है जो श्रेणी में एक से ज़्यादा पकवानों में आती हैं। सेट ऑपरेशन इस्तेमाल करके, आपके फंक्शन को "सिंगलटन" सामग्री का एक Set लौटाना चाहिए (श्रेणी में सिर्फ एक पकवान में आने वाली सामग्री)।

julia> singleton_ingredients(example_dishes, EXAMPLE_INTERSECTION)
Set(["garlic powder", "sunflower oil", "mixed herbs", "cornstarch", "celeriac", "honey", "mushrooms", "bell pepper", "rosemary", "parsley", "lemon", "yeast", "vegetable oil", "vegetable stock", "silken tofu", "tofu", "cashews", "lemon zest", "smoked tofu", "spaghetti", "ginger", "breadcrumbs", "tomatoes", "barley malt", "red pepper flakes", "oregano", "red onion", "fresh basil"])
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Julia Exercism

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

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