fork download
  1. import collections
  2.  
  3. class ShoppingCard():
  4.  
  5.  
  6. def __init__(self, tours, buyNgetM, bulkDiscount, freeTour):
  7. self.tours = tours
  8. self.buyNgetM = buyNgetM
  9. self.bulkDiscount = bulkDiscount
  10. self.freeTour = freeTour
  11.  
  12. def calc_price(self, userInput):
  13. orders = userInput.split()
  14. cOrders = collections.Counter(orders)
  15.  
  16. for t, n, m in self.buyNgetM:
  17. if int(cOrders[t] - (cOrders[t] / m)) != 0 and cOrders[t] >= m:
  18. cOrders[t] = int(cOrders[t] - (cOrders[t] / m))
  19.  
  20. for buy, free in self.freeTour:
  21. if free in cOrders:
  22. cOrders[free] = cOrders[free] -cOrders[buy]
  23. if cOrders[free] < 0:
  24. del cOrders[free]
  25.  
  26. price = 0
  27. for k, v in cOrders.items():
  28. if v != 0:
  29. price += self.tours[k]*v
  30.  
  31. for t, n, discount in self.bulkDiscount:
  32. if t in cOrders and cOrders[t] > n:
  33. price -= cOrders[t]*discount
  34.  
  35. return price
  36.  
  37. def buy_n_get_m(self, tour, n, m):
  38. self.buyNgetM.append([tour, n, m])
  39.  
  40. def add_bulk_discount(self, tour, n, discount):
  41. self.bulkDiscount.append([tour, n, discount])
  42.  
  43. def free_for_sold(self, buyT, freeT):
  44. self.freeTour.append([buyT, freeT])
  45.  
  46. def add(self, tour, price):
  47. self.tours[tour] = price
  48.  
  49.  
  50. database = {'OH': 300.00, 'BC': 110.00, 'SK': 30.00}
  51. rBuyNgetM = [['OH', 2, 3]]
  52. rBulkDiscount = [['BC', 4, 20.00]]
  53. rfreeTour = [['OH', 'SK']]
  54. sp = ShoppingCard(database, rBuyNgetM, rBulkDiscount, rfreeTour)
  55. print(sp.calc_price('OH OH OH BC'))
  56. print(sp.calc_price('OH SK'))
  57. print(sp.calc_price('BC BC BC BC BC OH'))
  58. print(sp.calc_price('OH OH OH BC SK'))
  59. print(sp.calc_price('OH BC BC SK SK'))
  60. print(sp.calc_price('BC BC BC BC BC BC OH OH'))
  61. print(sp.calc_price('SK SK BC'))
  62. sp.add('AA', 200.00)
  63. sp.add('BB', 1350.00)
  64. print(sp.calc_price('OH OH AA AA AA'))
  65. print(sp.calc_price('AA BB OH'))
Success #stdin #stdout 0.01s 27720KB
stdin
Standard input is empty
stdout
710.0
300.0
750.0
710.0
550.0
1140.0
170.0
1200.0
1850.0