using Day3; if (args.Length < 1) { Console.WriteLine("Requires 1 args: inputFileName"); return -1; } var inputFile = args[0]; var parser = new SchematicParser(); var set = new HashSet(); var tokens = parser.Parse(inputFile).ToList(); foreach (var token in tokens) { if (token is SymbolToken sym) { foreach (var p in sym.Position.SurroundingAndSelf()) { set.Add(p); } } } Console.WriteLine(); for (var y = 0; y < parser.Height; y++) { for (var x = 0; x < parser.Width; x++) { if (set.Contains(new Point2D(x, y))) { Console.Write("X"); } else { Console.Write("-"); } } Console.WriteLine("|"); } var sum = 0; foreach (var token in tokens) { if (token is NumberToken num) { sum += IsTouchingSymbol(set, num); } } Console.WriteLine(); Console.WriteLine($"Sum: {sum}"); return 0; int IsTouchingSymbol(ISet set, NumberToken num) { for (var w = 0; w < num.Length; w++) { var p = num.Position with { X = num.Position.X + w }; if (set.Contains(p)) { return num.Value; } } return 0; }