Sha256: 94551b080103a15e278fcadcff29843a646bb6312f6215cd2b28860e991ac85a

Contents?: true

Size: 1.72 KB

Versions: 88

Compression:

Stored size: 1.72 KB

Contents

using System;
using System.Collections.Generic;
using System.Linq;

public static class BookStore
{
    public static double CalculateTotalCost(List<int> books)
    {
        return CalculateTotalCost(books, 0);
    }

    private static double CalculateTotalCost(List<int> books, double priceSoFar)
    {
        if (books.Count == 0)
        {
            return priceSoFar;
        }

        var groups = books
            .GroupBy(b => b)
            .Select(g => g.Key)
            .ToList();

        var minPrice = double.MaxValue;

        for (int i = groups.Count; i >= 1; i--)
        {
            var itemsToRemove = groups.Take(i).ToList();
            var remaining = books.ToList();

            foreach (var item in itemsToRemove)
            {
                remaining.Remove(item);
            }

            var price = CalculateTotalCost(remaining.ToList(), priceSoFar + CostPerGroup(i));
            minPrice = Math.Min(minPrice, price);
        }

        return minPrice;
    }

    private static double CostPerGroup(int groupSize)
    {
        double discountPercentage;

        switch (groupSize)
        {
            case 1:
                discountPercentage = 0;
                break;
            case 2:
                discountPercentage = 5;
                break;
            case 3:
                discountPercentage = 10;
                break;
            case 4:
                discountPercentage = 20;
                break;
            case 5:
                discountPercentage = 25;
                break;
            default:
                throw new InvalidOperationException($"Invalid group size: {groupSize}");
        }
        
        return 8 * groupSize * (100 - discountPercentage) / 100;
    }
}

Version data entries

88 entries across 88 versions & 1 rubygems

Version Path
trackler-2.1.0.48 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.47 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.46 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.45 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.44 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.43 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.42 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.41 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.40 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.39 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.38 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.37 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.36 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.34 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.33 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.32 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.31 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.30 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.29 tracks/csharp/exercises/book-store/Example.cs
trackler-2.1.0.28 tracks/csharp/exercises/book-store/Example.cs