From 6d6671e1dff8ebcaa8da68573963bfd5cbd8f2fb Mon Sep 17 00:00:00 2001 From: Chris Kaczor Date: Wed, 11 Dec 2019 06:45:52 -0500 Subject: [PATCH] Day 10 - Part 2 --- Day10/Day10.cs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/Day10/Day10.cs b/Day10/Day10.cs index 958e210..33676da 100644 --- a/Day10/Day10.cs +++ b/Day10/Day10.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; namespace Advent { @@ -55,6 +56,38 @@ namespace Advent } Console.WriteLine($"{bestLocation.Item1},{bestLocation.Item2} = {bestCount}"); + + var bestAngles = new Dictionary>(); + + foreach (var asteroid in asteroids) + { + if (asteroid.Equals(bestLocation)) + continue; + + var deltaY = asteroid.Item1 - bestLocation.Item1; + var deltaX = asteroid.Item2 - bestLocation.Item2; + + var angle = Math.Atan2(deltaY, deltaX) * 180.0 / Math.PI; + + if (!bestAngles.ContainsKey(angle)) + bestAngles[angle] = asteroid; + else + { + var bestDistance = Math.Sqrt(Math.Pow(bestAngles[angle].Item2 - bestLocation.Item2, 2) + Math.Pow(bestAngles[angle].Item1 - bestLocation.Item1, 2)); + var currentDistance = Math.Sqrt(Math.Pow(deltaX, 2) + Math.Pow(deltaY, 2)); + + if (currentDistance < bestDistance) + bestAngles[angle] = asteroid; + } + } + + var sortedAngles = bestAngles.Where(b => b.Key >= 0).OrderByDescending(b => b.Key).ToList(); + + sortedAngles.AddRange(bestAngles.Where(b => b.Key < 0).OrderByDescending(b => b.Key).ToList()); + + var betAngle = sortedAngles[199]; + + Console.WriteLine(betAngle.Value.Item1 * 100 + betAngle.Value.Item2); } } }