public decimal GetCost(IEnumerable <IHarryPotterBook> books)
        {
            decimal cost = 0;

            int paymentSetCount = 0;

            while (books.Any(x => x.count > paymentSetCount))
            {
                IEnumerable <IHarryPotterBook> bookSets = books.Where(x => x.count > paymentSetCount);
                int      bookCount = bookSets.Count();
                IPayment payment   = GetPayment(bookCount);
                int      setCount  = bookSets.Min(x => x.count) - paymentSetCount;
                cost            += payment.GetCost(bookSets, setCount);
                paymentSetCount += setCount;
            }
            return(cost);
        }