Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static decimal GetPrice(IEnumerable<Products> products, IDictionary<Products, decimal> prices)
- {
- var grouping = products.ToLookup(l => l);
- var ab = FullSetCount(List(grouping[Products.A], grouping[Products.B])) * 0.1m;
- var de = FullSetCount(List(grouping[Products.D], grouping[Products.E])) * 0.05m;
- var efg = FullSetCount(List(grouping[Products.E], grouping[Products.F], grouping[Products.G])) * 0.05m;
- var aAndklm = products
- .Where(p => p == Products.K || p == Products.L || p == Products.M)
- .Take(grouping[Products.A].Count())
- .Aggregate(0m, (acc, p) => acc + prices[p] * 0.05m);
- decimal onCount;
- switch (products.Except(List(Products.A, Products.B)).Count())
- {
- case var c when c < 3:
- onCount = 1m;
- break;
- case 3:
- onCount = 0.95m;
- break;
- case 4:
- onCount = 0.90m;
- break;
- case var c when c >= 5:
- onCount = 0.95m;
- break;
- default:
- onCount = 1m;
- break;
- }
- var initalSum = products.Sum(p => prices[p]);
- var result = (initalSum - ab - de - efg - aAndklm) * onCount;
- return result;
- }
- static int FullSetCount<T>(params IEnumerable<T>[] cols)
- {
- return cols.Select(c => c.Count()).Min();
- }
- static IEnumerable<T> List<T>(params T[] items) => items;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement