using System.Collections.Generic;
public static void Main()
var results = DistributionService.Process(20, new Dictionary<string, double>(){
Console.WriteLine("Results count: {0}", results.Count());
Console.WriteLine(string.Join("\n", results.Select(x => x.Name)));
public class DistributionService
public static IEnumerable<DistributionItem> Process(int slots, Dictionary<string, double> distributions)
if(distributions.Sum(x => x.Value) != 1)
throw new ArgumentException("Values must equal 100%");
List<DistributionItem> items = new List<DistributionItem>();
foreach(var d in distributions)
int count = (int)(slots * d.Value);
for(int i = 0; i < count; i++)
items.Add(new DistributionItem(d.Key));
public static List<DistributionItem> Shuffle(List<DistributionItem> list)
Random rng = new Random(0);
DistributionItem value = list[k];
public class DistributionItem
public string Name { get; set; }
public DistributionItem(string name)