using System.Collections.Generic;
public static void Main()
var categories = SetupCategories();
var cleanCategoryList = categories
.OrderByDescending(c => c.Item2.Count);
var catsWithUniqSubCats = new List<(Category, HashSet<string>)>();
foreach (var tuple in candidates)
if (!catsWithUniqSubCats.Any(c => tuple.Item2.IsSubsetOf(c.Item2)))
catsWithUniqSubCats.Add(tuple);
return catsWithUniqSubCats.Select(tup => tup.Item1);
Console.WriteLine(string.Join("\n", cleanCategoryList));
private static List<Category> SetupCategories()
var duplicateCategory = new Category
SubCategories = new List<SubCategory> {
var duplicateCategory2 = new Category
SubCategories = new List<SubCategory> {
var categories = new List<Category>
SubCategories = new List<SubCategory> {
SubCategories = new List<SubCategory> {
public string Name { get; set; }
public List<SubCategory> SubCategories { get; set; }
public override string ToString()
return $"Name: {Name}, SubCategories: [\n {string.Join("\n ", SubCategories.Select(sc => $"({sc.ToString()})"))}\n]";
public int order { get; set; }
public string Name { get; set; }
public override string ToString()
return $"Name: {Name}, order: {order}";