| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- namespace Day19;
- public record Data(IDictionary<string, Rule> Rules, IList<Part> 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<RuleResultRange>();
- 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;
- }
- }
|