static void Main(string[] args) { StreamReader Reader = new StreamReader(@"/Work/AoC/Day 3/day3.in"); StreamWriter Writer = new StreamWriter(@"/Work/AoC/Day 3/day3.out"); String[] FirstLine = Reader.ReadLine().Split(","); String[] SecondLine = Reader.ReadLine().Split(","); GetPath(out PathA, FirstLine); GetPath(out PathB, SecondLine); List <KeyValuePair <(int, int), int> > Intersect = PathA.Where(d => PathB.ContainsKey(d.Key)).ToList(); int minIntersection = Intersect.Min(e => Math.Abs(e.Key.Item1) + Math.Abs(e.Key.Item2)); int bestIntersection = Intersect.Min(e => PathA[e.Key] + PathB[e.Key]); Console.WriteLine("Minimum intersection: {0}", minIntersection); Console.WriteLine("Best intersection: {0}", bestIntersection); Writer.WriteLine(minIntersection); Writer.WriteLine(bestIntersection); Writer.Close(); Reader.Close(); }
static int getTotalDistance(Intersect intersect, List <LineBase> wire1Lines, List <LineBase> wire2Lines) { Console.WriteLine(string.Format("For intersect {0}", intersect.coordinate)); Console.WriteLine(string.Format("\t{0}", intersect.distance)); int distance = intersect.distance; for (int i = 0; i < intersect.line1.index; i++) { var line = (from item in wire1Lines where item.index == i select item).FirstOrDefault(); Console.WriteLine(string.Format("\t{0}", line.distance)); distance += line.distance; } for (int i = 0; i < intersect.line2.index; i++) { var line = (from item in wire2Lines where item.index == i select item).FirstOrDefault(); Console.WriteLine(string.Format("\t{0}", line.distance)); distance += line.distance; } Console.WriteLine("\t-----------"); Console.WriteLine(string.Format("\t{0}", distance)); return(distance); }
static List <Intersect> GetIntersections(List <LineBase> lineSet1, List <LineBase> lineSet2) { List <Intersect> intersects = new List <Intersect>(); foreach (var p1 in lineSet1) { foreach (var p2 in lineSet2) { Horizontal h = (p1 is Horizontal)?(Horizontal)p1:(Horizontal)p2; Vertical v = (p1 is Vertical)?(Vertical)p1:(Vertical)p2; Coordinate c = LineMath.Intersect(h, v); if (c != null && !(c.x == 0 && c.y == 0)) { var intersect = new Intersect() { coordinate = c, line1 = p1, line2 = p2 }; intersects.Add(intersect); Console.WriteLine(string.Format("Found {0},{1} distance {4} {2} {3}", c.x, c.y, p1, p2, intersect.distance)); } } } return(intersects); }