ট্র্যাক
/
Gleam
Gleam
/
অনুশীলনী
/
গটা স্ন্যাচ এম অল
গটা স্ন্যাচ এম অল

গটা স্ন্যাচ এম অল

লার্নিং অনুশীলনী

ভূমিকা

সেট

সেট হলো অনন্য মানের একটি অপরিবর্তনীয় ও ক্রমহীন সংগ্রহ। একটি সেটের সব এলিমেন্ট একই টাইপের হতে হবে।

gleam/set মডিউলটি Set টাইপ ডিফাইন করে এবং সেট নিয়ে কাজ করার ফাংশন দেয়।

আপনি set.to_list আর set.from_list দিয়ে অ্যারে ও সেটকে পরস্পরে রূপান্তর করতে পারেন। সেটে এলিমেন্টের ক্রম নিশ্চিত নয়।

set.from_list([2, 3, 3, 3, 1, 1, 2])
// -> set.from_list([1, 2, 3])

set.to_list(set.from_list([2, 3, 3, 3, 1, 1, 2]))
// -> [1, 2, 3]

আপনি set.new, set.insert আর set.delete দিয়ে সেট তৈরি ও পূরণ করতে পারেন।

set.new()
// -> set.from_list([])

let eighty_eight = set.from_list([88])

set.insert(eighty_eight, 88)
// -> set.from_list([88])

set.insert(eighty_eight, 89)
// -> set.from_list([88, 89])

set.delete(eighty_eight, 89)
// -> set.from_list([88])

আপনি set.contains আর set.size ফাংশন দিয়ে সেটের বিষয়বস্তু জানতে পারেন।

set.contains(eighty_eight, 88)
// -> True

set.size(eighty_eight)
// -> 1

সেটগুলো set.union আর set.intersection দিয়ে মেলানো যায়।

let a = set.from_list([1, 5, 10])
let b = set.from_list([1, 2, 3, 4, 5])

set.union(a, b)
// -> set.from_list([1, 2, 3, 4, 5, 10])

set.intersection(a, b)
// -> set.from_list([1, 5])

আপনি সেট ফিল্টারও করতে পারেন।

let is_small = fn(n) { n <= 3 }

set.filter(b, is_small)
// -> set.from_list([1, 2, 3])

নির্দেশনা

Blorkemon™️ কার্ডের প্রতি আপনার নস্টালজিয়া যেন কমার নামই নেই, আপনি তো আবার সেগুলো সংগ্রহ করাও শুরু করে দিয়েছেন, আর বন্ধুদেরও নিজের সঙ্গে যোগ দিতে উৎসাহ দিচ্ছেন।

এই অনুশীলনীতে একটি কার্ডের সংগ্রহ বোঝানো হয়েছে Set(String) দিয়ে, কারণ আপনার লক্ষ্য যখন বিদ্যমান সব কার্ড পাওয়া, তখন একই কার্ড একাধিকবার থাকা গুরুত্বপূর্ণ নয়।

1. একটি সংগ্রহ শুরু করুন

আপনি সত্যিই চান আপনার বন্ধুরাও আপনার Blorkemon™️-পাগলামিতে যোগ দিক, আর তার সবচেয়ে ভালো উপায় হলো তাদের একটি কার্ড দিয়ে তাদের সংগ্রহ শুরু করে দেওয়া।

new_collection ইমপ্লিমেন্ট করুন, যা একটি কার্ডকে একটি সংগ্রহে রূপান্তর করে।

new_collection("Newthree")
// -> set.from_list(["Newthree"])

2. সংগ্রহ বাড়ান

একবার আপনার হাতে একটি সংগ্রহ এলে তা নিজের একটা জীবন পেয়ে যায়, আর তাকে বাড়তেই হবে।

add_card ইমপ্লিমেন্ট করুন, যা একটি কার্ড আর একটি সংগ্রহ নেয়, এবং দুটি মানের একটি টিউপল রিটার্ন করে: একটি Bool, যা জানায় কার্ডটি আগেই সংগ্রহে ছিল কি না, এবং কার্ডটি যোগ করা সেই সংগ্রহটি।

add_card(set.from_list(["Newthree"]), "Scientuna")
// -> #(False, set.from_list(["Newthree", "Scientuna"]))

3. বিনিময় শুরু করুন

এখন যেহেতু আপনার বন্ধুরা আবার Blorkemon™️ নিয়ে পাগল হয়ে উঠেছে, আপনি কার্ড বিনিময় করে নিজের সংগ্রহ বাড়িয়ে নিতে পারেন।

সব বিনিময়ই যে করা যায় বা লাভজনক, তা কিন্তু নয়। আপনার কাছে নেই এমন কার্ড বিনিময় করা যায় না, আর যে কার্ড আপনার কাছে আগেই আছে, তার জন্য কোনো কার্ড বিনিময় করা উচিত নয়।

trade_card ইমপ্লিমেন্ট করুন, যা বিনিময়ের জন্য দুটি কার্ড (আপনার আর তাদের) এবং আপনার বর্তমান সংগ্রহ নেয়। এর রিটার্ন ভ্যালু দুটি মানের একটি টিউপল: একটি Bool, যা জানায় বিনিময়টি সম্ভব এবং লাভজনক কি না, আর বিনিময়টি করলে শেষে আপনার হাতে যে সংগ্রহটি থাকত সেটি (যদিও সেটি আসলে সম্ভবই না হয়)।

trade_card("Scientuna", "Newthree", set.from_list(["Scientuna"]))
// -> #(True, set.from_list(["Newthree"]))

4. সবার কাছে থাকা কার্ড

আপনি আর আপনার Blorkemon™️-অনুরাগী বন্ধুরা একসঙ্গে জড়ো হয়ে ভাবেন, সবচেয়ে কমন কার্ডগুলো কোনগুলো।

boring_cards ইমপ্লিমেন্ট করুন, যা সংগ্রাহের একটি অ্যারে নেয় আর এমন সাজানো কার্ডের একটি অ্যারে রিটার্ন করে, যেগুলো সব সংগ্রহেই আছে।

boring_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> ["Scientuna"]

5. সব কার্ড

আপনি আর আপনার বন্ধুরা মিলে কি Blorkemon™️-এর সব কার্ডেরই মালিক?

total_cards ইমপ্লিমেন্ট করুন, যা সংগ্রাহের একটি অ্যারে নেয় আর সব সংগ্রহ মিলিয়ে ভিন্ন ভিন্ন কার্ডের মোট সংখ্যা রিটার্ন করে।

total_cards([set.from_list(["Scientuna"]), set.from_list(["Newthree", "Scientuna"])])
// -> 2

6. চকচকেই জয়

আপনার ভাগনে খুব শিগগিরই আপনার সঙ্গে দেখা করতে আসছে, আর আপনি তাকে মুগ্ধ করতে চান। ছোটরা তো চকচকে জিনিস পছন্দ করে, তাই না? Blorkemon™️ কার্ড তো চকচকেও হতে পারে!

shiny_cards ইমপ্লিমেন্ট করুন, যা একটি সংগ্রহ নেয় আর "Shiny " দিয়ে শুরু হওয়া সব কার্ড ধারণ করা একটি সেট রিটার্ন করে।

shiny_cards(set.from_list(["Newthree", "Scientuna", "Shiny Scientuna"]))
// -> set.from_list(["Shiny Scientuna"])
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Gleam Exercism

গটা স্ন্যাচ এম অল শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Gleam ট্র্যাকের 33টি কনসেপ্ট122টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।