ट्रैक
/
Elixir
Elixir
/
अभ्यास
/
बुटीक सुझाव
बुटीक सुझाव

बुटीक सुझाव

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

परिचय

लिस्ट कॉम्प्रिहेंशन

कॉम्प्रिहेंशन एन्यूमरेबल को आसानी से और घोषणात्मक तरीके से बदलने की सुविधा देते हैं।

बहुत सरल कॉम्प्रिहेंशन बनाने के लिए हम for कीवर्ड लिखते हैं, जिसके बाद एक जेनरेटर और एक डू-ब्लॉक आता है। यह डू-ब्लॉक एन्यूमरेट की गई वैल्युओं से नई वैल्यू बनाता है।

for n <- [0, 1, 2, 3], do: n + 1
# => [1, 2, 3, 4]

कॉम्प्रिहेंशन में फिल्टर भी हो सकते हैं। जो वैल्यू फिल्टर से नहीं गुज़रतीं, वे अंतिम ऐरे से हटा दी जाती हैं:

for n <- [0, 1, 2, 3], n > 1, do: n + 1
# => [3, 4]

हम इससे भी जटिल कॉम्प्रिहेंशन कई लाइनों में बना सकते हैं:

for {atom, number} <- [a: 1, b: 2, c: 3, d: 4],
    rem(number, 2) == 0 do
  atom
end

# => [:b, :d]

कई जेनरेटर इस्तेमाल करके एक कार्टेशियन गुणनफल बनाया जा सकता है। इसका मतलब है कि पहले जेनरेटर से बनने वाली हर वैल्यू को दूसरे जेनरेटर से बनने वाली हर वैल्यू के साथ एक बार जोड़ा जाता है:

for x <- [0, 1],
    y <- [0, 1] do
  {x, y}
end

# => [{0, 0}, {0, 1}, {1, 0}, {1, 1}]

निर्देश

ऑनलाइन फैशन बुटीक स्टोर पर आपका काम जारी है। आपके मन में वेबसाइट के लिए एक नए फीचर का विचार आता है, जिसमें उपयोगकर्ता को एक आउटफिट सुझाया जाता है। आप बहुत सारे सुझाव देना चाहते हैं, पर बुरे सुझाव नहीं देना चाहते। इसलिए आप लिस्ट कॉम्प्रिहेंशन इस्तेमाल करने का फैसला करते हैं, क्योंकि इससे आप आउटफिट के कॉम्बिनेशन आसानी से बना सकते हैं और फिर कुछ मानदंडों के हिसाब से उन्हें छाँट सकते हैं।

कपड़ों के आइटम एक मैप में संग्रहीत किए जाते हैं:

%{
  item_name: "Descriptive Name",
  price: 99.00,
  color: "Ochre Red",
  base_color: "red"
}

1. एक कॉम्बिनेशन सुझाइए

get_combinations/3 को लागू कीजिए, जो टॉप का एक ऐरे, बॉटम का एक ऐरे और ऑप्शन्स की एक कीवर्ड लिस्ट लेता है। अभी के लिए ऑप्शन्स का डिफॉल्ट एक खाली कीवर्ड लिस्ट रखिए। फंक्शन को इन ऐरे का कार्टेशियन प्रोडक्ट लौटाना चाहिए।

tops = [
  %{item_name: "Dress shirt"},
  %{item_name: "Casual shirt"}
]

bottoms = [
  %{item_name: "Jeans"},
  %{item_name: "Dress trousers"}
]

BoutiqueSuggestions.get_combinations(tops, bottoms)
# => [
#      {%{item_name: "Dress shirt"}, %{item_name: "Jeans"}},
#      {%{item_name: "Dress shirt"}, %{item_name: "Dress trousers"}},
#      {%{item_name: "Casual shirt"}, %{item_name: "Jeans"}},
#      {%{item_name: "Casual shirt"}, %{item_name: "Dress trousers"}}
#    ]

2. बेमेल आउटफिट हटाइए

कपड़ों के हर आइटम में एक :base_color फील्ड होता है। इस फील्ड का इस्तेमाल करके वे सारे कॉम्बिनेशन हटा दीजिए जिनमें टॉप और बॉटम का बेस कलर एक ही हो।

tops = [
  %{item_name: "Dress shirt", base_color: "blue"},
  %{item_name: "Casual shirt", base_color: "black"}
]

bottoms = [
  %{item_name: "Jeans", base_color: "blue"},
  %{item_name: "Dress trousers", base_color: "black"}
]

BoutiqueSuggestions.get_combinations(tops, bottoms)
# => [
#      {%{item_name: "Dress shirt", base_color: "blue"},
#       %{item_name: "Dress trousers", base_color: "black"}},
#      {%{item_name: "Casual shirt", base_color: "black"},
#       %{item_name: "Jeans", base_color: "blue"}}
#    ]

3. कॉम्बिनेशन की कीमत के हिसाब से छाँटिए

कपड़ों के हर आइटम से एक :price फील्ड जुड़ा होता है। आप बहुत सारे सुझाव देना चाहते हैं, पर साथ ही यह भी चाहते हैं कि उपयोगकर्ताओं को अपने बजट के भीतर कीमत चुनने का मौका मिल सके। ऑप्शन्स की कीवर्ड लिस्ट में से :maximum_price का इस्तेमाल करके वे सारे कॉम्बिनेशन हटा दीजिए जिनमें टॉप और बॉटम की कीमत अधिकतम कीमत से अधिक हो।

अगर maximum_price नहीं दिया गया हो, तो डिफॉल्ट 100.00 होना चाहिए।

tops = [
  %{item_name: "Dress shirt", base_color: "blue", price: 35},
  %{item_name: "Casual shirt", base_color: "black", price: 20}
]

bottoms = [
  %{item_name: "Jeans", base_color: "blue", price: 30},
  %{item_name: "Dress trousers", base_color: "black", price: 75}
]

BoutiqueSuggestions.get_combinations(tops, bottoms, maximum_price: 50)
# => [
#      {%{item_name: "Casual shirt", base_color: "black", price: 20},
#       %{item_name: "Jeans", base_color: "blue", price: 30}}
#    ]
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Elixir Exercism

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

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