namespace Day19; public record Data(IDictionary Rules, IList Parts) { public int Process() { var sum = 0; foreach (var part in Parts) { Console.WriteLine(part); var next = "in"; while (next != "A" && next != "R") { var rule = Rules[next]; next = rule.Apply(part); } if (next == "A") { sum += part.Total; Console.WriteLine("ACCEPTED"); } else { Console.WriteLine("REJECTED"); } } return sum; } public long ComputePermutations() { var sum = 0L; var queue = new Queue(); queue.Enqueue(new RuleResultRange(new PartRange(), "in")); while (queue.Count > 0) { var current = queue.Dequeue(); Console.WriteLine($"Applying {current.Next} to {current.Part}"); var next = current.Next!; if (next == "A") { sum += current.Part.Total(); Console.WriteLine("ACCEPTED"); } else if (next == "R") { Console.WriteLine("REJECTED"); } else { var rule = Rules[next]; foreach (var r in rule.Apply(current.Part)) { queue.Enqueue(r); } } } return sum; } }