Program.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Day3;
  2. if (args.Length < 1)
  3. {
  4. Console.WriteLine("Requires 1 args: inputFileName");
  5. return -1;
  6. }
  7. var inputFile = args[0];
  8. var parser = new SchematicParser();
  9. var set = new HashSet<Point2D>();
  10. var tokens = parser.Parse(inputFile).ToList();
  11. foreach (var token in tokens)
  12. {
  13. if (token is SymbolToken sym)
  14. {
  15. foreach (var p in sym.Position.SurroundingAndSelf())
  16. {
  17. set.Add(p);
  18. }
  19. }
  20. }
  21. Console.WriteLine();
  22. for (var y = 0; y < parser.Height; y++)
  23. {
  24. for (var x = 0; x < parser.Width; x++)
  25. {
  26. if (set.Contains(new Point2D(x, y)))
  27. {
  28. Console.Write("X");
  29. }
  30. else
  31. {
  32. Console.Write("-");
  33. }
  34. }
  35. Console.WriteLine("|");
  36. }
  37. var sum = 0;
  38. foreach (var token in tokens)
  39. {
  40. if (token is NumberToken num)
  41. {
  42. sum += IsTouchingSymbol(set, num);
  43. }
  44. }
  45. Console.WriteLine();
  46. Console.WriteLine($"Sum: {sum}");
  47. return 0;
  48. int IsTouchingSymbol(ISet<Point2D> set, NumberToken num)
  49. {
  50. for (var w = 0; w < num.Length; w++)
  51. {
  52. var p = num.Position with { X = num.Position.X + w };
  53. if (set.Contains(p))
  54. {
  55. return num.Value;
  56. }
  57. }
  58. return 0;
  59. }