ট্র্যাক
/
Ruby
Ruby
/
অনুশীলনী
/
বুটিক ইনভেন্টরি
বুটিক ইনভেন্টরি

বুটিক ইনভেন্টরি

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

ভূমিকা

আরও এনুমারেশন মেথড

বার্ড কাউন্ট-এ আপনার পরিচয় করিয়ে দেওয়া হয়েছিল count, any?, select, all? আর map এনুমারেশন মেথডগুলোর সাথে। এখানে সেগুলোর একটি পুনরালোচনা দেওয়া হলো, সাথে যোগ করা হয়েছে কয়েকটি বাড়তি মেথডও:

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.count  { |number| number == 1 }   #=> 2
fibonacci.any?   { |number| number > 20 }   #=> false
fibonacci.none?  { |number| number > 20 }   #=> true
fibonacci.select { |number| number.odd? }   #=> [1, 1, 3, 5, 13]
fibonacci.all?   { |number| number < 20 }   #=> true
fibonacci.map    { |number| number * 2  }   #=> [0, 2, 2, 4, 6, 10, 16, 26]
fibonacci.select { |number| number >= 5 }   #=> [5, 8, 13]
fibonacci.find   { |number| number >= 6 }   #=> 8

# Some methods work with or without a block
fibonacci.sum  #=> 33
fibonacci.sum { |number| number * number }  #=> 273

# There are also methods to help with nested arrays:
animals = [ ['cat', 'bob'], ['horse', 'caris'], ['mouse', 'arya'] ]
animals.flatten  #=> ["cat", "bob", "horse", "caris", "mouse", "arya"]

হ্যাশ এনুমারেট করা

Hash অবজেক্ট এনুমারেট করা আর Array অবজেক্ট এনুমারেট করা একেবারে একই, তবে পার্থক্য একটাই: ব্লকটি দুটি আর্গুমেন্ট পায়, কী (key) আর মান:

pet_names = {cat: "bob", horse: "caris", mouse: "arya"}
pet_names.each { |animal, name| ... }

যদি দুটির মধ্যে আপনার কেবল একটি মান দরকার হয়, তাহলে বিশেষ _ চিহ্নটি দিয়ে বোঝাতে পারেন যে অন্যটি লাগবে না। এতে ডেভেলপারের জন্য কোডটা পরিষ্কারভাবে বোঝা সহজ হয়, আর এটি পারফরম্যান্সের দিক থেকেও একটি অপ্টিমাইজেশন।

pet_names = {cat: "bob", horse: "caris", mouse: "arya"}
pet_names.map { |_, name| name }  #=> ["bob", "caris", "arya"]

নেস্টেড এনুমারেশন

আপনি নেস্টেড ব্লকের ভেতরেও এনুমারেট করতে পারেন, আর এক মেথডের ফল আরেক মেথডে জুড়ে দিতে পারেন। উদাহরণস্বরূপ, ধরা যাক আমাদের কাছে প্রাণীদের নিয়ে হ্যাশের একটি অ্যারে আছে, আর আমরা ছোট নামের প্রাণীগুলো বের করতে চাই। তাহলে আমরা এরকম কিছু করতে পারি:

pets = [
  { animal: "cats", names: ["bob", "fred", "sandra"] },
  { animal: "horses", names: ["caris", "black beard", "speedy"] },
  { animal: "mice", names: ["arya", "jerry"] }
]

pets.map { |pet|
  pet[:names].select { |name| name.length <= 5 }
}.flatten.sort
#=> ["arya", "bob", "caris", "fred", "jerry"]

নির্দেশনা

আপনি একটি অনলাইন ফ্যাশন বুটিক চালান। আপনার বছরের বড় সেল আসছে, তাই ইনভেন্টরির হিসাব নিতে এবং সব ঠিকঠাক আছে কি না নিশ্চিত হতে কিছু ফাংশনালিটি তৈরি করতে চান।

ইনভেন্টরির একটি একক আইটেম প্রকাশ করা হয় একটি হ্যাশ দিয়ে, আর পুরো ইনভেন্টরি হলো এমন হ্যাশের একটি অ্যারে।

[
  {
    name: "White Shirt",
    price: 40,
    quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}
  },
  { ... }
]

1. আইটেমগুলোর নামের একটি তালিকা রিটার্ন করুন

BoutiqueInventory.item_names ইমপ্লিমেন্ট করুন, যা আইটেমের নামগুলো বর্ণানুক্রমে সাজানো একটি তালিকা রিটার্ন করবে।

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).item_names

#=> ["Bamboo Socks Cats", "Black Short Skirt", "Maxi Brown Dress", "Red Short Skirt"]

2. যেসব আইটেম সস্তা সেগুলো রিটার্ন করুন

BoutiqueInventory.cheap ইমপ্লিমেন্ট করুন, যা $30-এর কম দামের যেকোনো আইটেম রিটার্ন করবে।

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).cheap

# => [
#      {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
#      {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
#    ]

3. যেসব আইটেম স্টকে নেই সেগুলো রিটার্ন করুন

BoutiqueInventory.out_of_stock ইমপ্লিমেন্ট করুন, যা এমন সব আইটেম রিটার্ন করবে যেগুলোর কোনো স্টক নেই (যেখানে quantity_by_size খালি)।

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).out_of_stock

#=> [{price: 50.00, name: "Red Short Skirt", quantity_by_size: {}}]

4. একটি একক আইটেমের স্টক রিটার্ন করুন

নাম অনুসারে একটি আইটেমের স্টক রিটার্ন করতে BoutiqueInventory.stock_for_item(name) ইমপ্লিমেন্ট করুন:

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).stock_for_item("Black Short Skirt")

#=> {s: 1, xl: 4}

5. মোট স্টক রিটার্ন করুন

আপনার স্টোররুমে থাকা মোট আইটেমের পরিমাণ হিসাব করতে BoutiqueInventory.total_stock ইমপ্লিমেন্ট করুন:

BoutiqueInventory.new([
  {price: 65.00, name: "Maxi Brown Dress", quantity_by_size: {s: 3, m: 7, l: 8, xl: 4}},
  {price: 50.00, name: "Red Short Skirt", quantity_by_size: {}},
  {price: 29.99, name: "Black Short Skirt", quantity_by_size: {s: 1, xl: 4}},
  {price: 20.00, name: "Bamboo Socks Cats", quantity_by_size: {s: 7, m: 2}}
]).total_stock

#=> 36
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Ruby Exercism

বুটিক ইনভেন্টরি শুরু করতে প্রস্তুত?

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