using System.Collections.Generic;
public string ProductContext {get;}
public Resource(string productContext)
ProductContext = productContext;
public static void Main()
List<Resource> resources = [
int _minResourcesPerProductContext = 10;
int maxResourcesPerUser = 40;
int toDelete = resources.Count() - maxResourcesPerUser;
Dictionary<string, int> deleteCandidates = resources
.GroupBy(resource => resource.ProductContext)
.Where(group => group.Count() > _minResourcesPerProductContext)
.ToDictionary(group => group.Key, group => group.Count() - _minResourcesPerProductContext);
int canBeDeleted = deleteCandidates.Sum(c => c.Value);
foreach (var (k, v) in deleteCandidates)
deleteCandidates[k] = (int)Math.Ceiling((float)deleteCandidates[k] / canBeDeleted * toDelete);
Console.WriteLine($"deleteCandidates[{k}] = {deleteCandidates[k]}");