namespace Day19; public class PartRange { private readonly IDictionary _dict; public PartRange() { _dict = new Dictionary { ["x"] = new Range(1, 4000), ["m"] = new Range(1, 4000), ["a"] = new Range(1, 4000), ["s"] = new Range(1, 4000), }; } private PartRange(PartRange original) { _dict = new Dictionary(original._dict); } public Range Get(string property) { return _dict[property]; } public PartRange Update(string property, Range range) { var copy = new PartRange(this); copy._dict[property] = range; return copy; } public long Total() { return Get("x").Size * Get("m").Size * Get("a").Size * Get("s").Size; } public override string ToString() { return $"x = {Get("x")}, m = {Get("m")}, a = {Get("a")}, s = {Get("s")}, "; } }