using Spectre.Console; namespace AdventOfCode.Days; public class Day1 : Day { public override int Number => 1; public override string Name => "Historian Hysteria"; public override void RunPart1(bool display = true) { List leftNumbers = []; List rightNumbers = []; foreach (var line in Input.AsSpan().EnumerateLines()) { var separatorIndex = line.IndexOf(' '); leftNumbers.Add(int.Parse(line[..separatorIndex])); rightNumbers.Add(int.Parse(line[(separatorIndex + 1)..])); } leftNumbers.Sort(); rightNumbers.Sort(); var totalDistance = leftNumbers.Zip(rightNumbers, (a, b) => Math.Abs(a - b)).Sum(); if (display) { AnsiConsole.MarkupLine($"[green]Total distance is: [yellow]{totalDistance}[/][/]"); } } public override void RunPart2(bool display = true) { List leftNumbers = []; Dictionary rightNumbersCount = []; var similarityScore = 0; foreach (var line in Input.AsSpan().EnumerateLines()) { var separatorIndex = line.IndexOf(' '); leftNumbers.Add(int.Parse(line[..separatorIndex])); var rightNumber = int.Parse(line[(separatorIndex + 1)..]); if (!rightNumbersCount.TryAdd(rightNumber, 1)) { rightNumbersCount[rightNumber]++; } } foreach (var leftNumber in leftNumbers) { similarityScore += leftNumber * rightNumbersCount.GetValueOrDefault(leftNumber); } if (display) { AnsiConsole.MarkupLine($"[green]Similarity score is: [yellow]{similarityScore}[/][/]"); } } }