Menu
Coddy logo textTech

Повторение — коды купонов

Часть раздела Объектно-ориентированное программирование путешествия по 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