public void Part2() { var competitors = new List <Competitor>(); extractCompetitors(competitors, inputString); for (int i = 0; i < 2503; i++) { var comparer = new GeneralizedComparer <int>(); var score = new SortedList <int, Competitor>(comparer); foreach (var c in competitors) { c.Tick(); score.Add(c.Distance, c); } int lastDistance = score.Last().Value.Distance; foreach (var s in score.Reverse()) { if (s.Value.Distance != lastDistance) { break; } s.Value.Points += 1; } } int bestScore = int.MinValue; foreach (var c in competitors) { Console.WriteLine($"{c.Name}: {c.Points}"); bestScore = Math.Max(bestScore, c.Points); } Console.WriteLine($"Best score: {bestScore}"); }
public void Part2Examples() { var competitors = new List <Competitor>(); extractCompetitors(competitors, exampleInput); for (int i = 0; i < 1000; i++) { var comparer = new GeneralizedComparer <int>(); var score = new SortedList <int, Competitor>(comparer); foreach (var c in competitors) { c.Tick(); score.Add(c.Distance, c); } int lastDistance = score.Last().Value.Distance; foreach (var s in score.Reverse()) { if (s.Value.Distance != lastDistance) { break; } s.Value.Points += 1; } } foreach (var c in competitors) { Console.WriteLine($"{c.Name}: {c.Points}"); } }