Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - رموز القسائم

جزء من قسم البرمجة كائنية التوجه في رحلة Ruby على Coddy. الدرس 16 من 57.

challenge icon

التحدي

متوسط

أكمل الفئة Coupon. يقبل المصنع Coupon.parse(code) القيمة SAVE متبوعة بنسبة مئوية (SAVE10) أو OFF متبوعة بمبلغ (OFF5)، ويُرجع nil لأي رمز آخر. تُخفَّض النسب المئوية التي تتجاوز الثابت MAX_PERCENT (50) إلى 50. يُحتسب كل قسيمة ينشئها المصنع في متغير مثيل للفئة، ويمكن قراءة العدد باستخدام Coupon.issued؛ اجعل new خاصًا. تُرجع apply(total) الإجمالي بعد الخصم، على ألا يقل أبدًا عن 0، وتُرجع to_s القيمة SAVE10 (10% off) أو OFF5 (5.00 off).

يقرأ الكود المزوَّد إجمالي الطلب من السطر الأول ورمزًا واحدًا في كل سطر تالٍ. ويطبع SAVE10 (10% off): 90.00 أو invalid code HELLO، ثم يطبع أخيرًا issued: 2.

ضع الكود في coupon.rb. يحتوي main.rb على كود الإدخال/الإخراج المزوَّد ولا يمكن تعديله.

جرّب بنفسك

require_relative 'coupon'

# كود الإدخال/الإخراج المُزوَّد: اتركه كما هو
input = []
while (line = gets)
  input << line.chomp
end
total = input[0].to_f
input.drop(1).each do |code|
  coupon = Coupon.parse(code)
  if coupon
    puts format("%s: %.2f", coupon, coupon.apply(total))
  else
    puts "invalid code #{code}"
  end
end
puts "issued: #{Coupon.issued}"

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Ruby عبر الإنترنت