PartRange.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. namespace Day19;
  2. public class PartRange
  3. {
  4. private readonly IDictionary<string, Range> _dict;
  5. public PartRange()
  6. {
  7. _dict = new Dictionary<string, Range>
  8. {
  9. ["x"] = new Range(1, 4000),
  10. ["m"] = new Range(1, 4000),
  11. ["a"] = new Range(1, 4000),
  12. ["s"] = new Range(1, 4000),
  13. };
  14. }
  15. private PartRange(PartRange original)
  16. {
  17. _dict = new Dictionary<string, Range>(original._dict);
  18. }
  19. public Range Get(string property)
  20. {
  21. return _dict[property];
  22. }
  23. public PartRange Update(string property, Range range)
  24. {
  25. var copy = new PartRange(this);
  26. copy._dict[property] = range;
  27. return copy;
  28. }
  29. public long Total()
  30. {
  31. return Get("x").Size
  32. * Get("m").Size
  33. * Get("a").Size
  34. * Get("s").Size;
  35. }
  36. public override string ToString()
  37. {
  38. return $"x = {Get("x")}, m = {Get("m")}, a = {Get("a")}, s = {Get("s")}, ";
  39. }
  40. }