diff --git a/Advent24/Day1.cs b/Advent24/Day1.cs new file mode 100644 index 0000000..38219cb --- /dev/null +++ b/Advent24/Day1.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Advent24 +{ + internal class Day1 + { + public Day1() + { + string fileData = System.IO.File.ReadAllText(@"..\..\..\inputd1.txt"); + var pairsArray = fileData.Split('\n'); + + var list1 = new SortedList(pairsArray.Length); + var list2 = new SortedList(pairsArray.Length); + foreach (var pair in pairsArray) + { + if (System.String.IsNullOrEmpty(pair)) continue; + // pairArray has 4 elements, and the middle two are blanks + // because there are 3 spaces between the two numbers + var pairArray = pair.Split(' '); + Int32 myInteger = System.Convert.ToInt32(pairArray[0]); + if (list1.TryGetValue(myInteger, out int value1)) list1[myInteger] = ++value1; + else list1.Add(myInteger, 1); + Console.WriteLine("{0:d} {1:d}", myInteger, list1[myInteger]); + + myInteger = System.Convert.ToInt32(pairArray[3]); + if (list2.TryGetValue(myInteger, out int value2)) list2[myInteger] = ++value2; + else list2.Add(myInteger, 1); + Console.WriteLine("{0:d} {1:d}", myInteger, list2[myInteger]); + } + + Int32 sumOfDifferences = 0; + Int32 i = 0, j = 0; + + var list1Copy = new SortedList(list1); + var list2Copy = new SortedList(list2); + + while (i < list1.Count && j < list2.Count) + { + Int32 value1 = list1.GetKeyAtIndex(i); + Int32 value2 = list2.GetKeyAtIndex(j); + + if (value1 > value2) sumOfDifferences += (value1 - value2); + else sumOfDifferences += (value2 - value1); + + list1[value1]--; list2[value2]--; + + if (list1[value1] == 0) i++; + if (list2[value2] == 0) j++; + } + + Console.WriteLine("{0:s} {1:d}", "Sum of differences = ", sumOfDifferences); + + i = 0; Int32 similarityScore = 0; + while (i < list1Copy.Count) + { + Int32 value1 = list1Copy.GetKeyAtIndex(i); + list2Copy.TryGetValue(value1, out Int32 numberOfAppearancesInList2); + + // default value of Int32 numberOfAppearancesInList2 is 0 + similarityScore += value1 * numberOfAppearancesInList2; + + list1Copy[value1]--; + + if (list1Copy[value1] == 0) i++; + } + + Console.WriteLine("{0:s} {1:d}", "Similarity score = ", similarityScore); + + Console.ReadLine(); + } + } +} diff --git a/Advent24/Program.cs b/Advent24/Program.cs index 7dbb1ee..affe24f 100644 --- a/Advent24/Program.cs +++ b/Advent24/Program.cs @@ -7,67 +7,7 @@ namespace Advent24 { static void Main(string[] args) { - string fileData = System.IO.File.ReadAllText(@"..\..\..\inputd1.txt"); - var pairsArray = fileData.Split('\n'); - - var list1 = new SortedList(pairsArray.Length); - var list2 = new SortedList(pairsArray.Length); - foreach(var pair in pairsArray) - { - if (System.String.IsNullOrEmpty(pair)) continue; - // pairArray has 4 elements, and the middle two are blanks - // because there are 3 spaces between the two numbers - var pairArray = pair.Split(' '); - Int32 myInteger = System.Convert.ToInt32(pairArray[0]); - if (list1.TryGetValue(myInteger, out int value1)) list1[myInteger] = ++value1; - else list1.Add(myInteger, 1); - Console.WriteLine("{0:d} {1:d}", myInteger, list1[myInteger]); - - myInteger = System.Convert.ToInt32(pairArray[3]); - if (list2.TryGetValue(myInteger, out int value2)) list2[myInteger] = ++value2; - else list2.Add(myInteger, 1); - Console.WriteLine("{0:d} {1:d}", myInteger, list2[myInteger]); - } - - Int32 sumOfDifferences = 0; - Int32 i = 0, j = 0; - - var list1Copy = new SortedList(list1); - var list2Copy = new SortedList(list2); - - while (i < list1.Count && j < list2.Count) - { - Int32 value1 = list1.GetKeyAtIndex(i); - Int32 value2 = list2.GetKeyAtIndex(j); - - if (value1 > value2) sumOfDifferences += (value1 - value2); - else sumOfDifferences += (value2 - value1); - - list1[value1]--; list2[value2]--; - - if (list1[value1] == 0) i++; - if (list2[value2] == 0) j++; - } - - Console.WriteLine("{0:s} {1:d}", "Sum of differences = ", sumOfDifferences); - - i = 0; Int32 similarityScore = 0; - while (i < list1Copy.Count) - { - Int32 value1 = list1Copy.GetKeyAtIndex(i); - list2Copy.TryGetValue(value1, out Int32 numberOfAppearancesInList2); - - // default value of Int32 numberOfAppearancesInList2 is 0 - similarityScore += value1 * numberOfAppearancesInList2; - - list1Copy[value1]--; - - if (list1Copy[value1] == 0) i++; - } - - Console.WriteLine("{0:s} {1:d}", "Similarity score = ", similarityScore); - - Console.ReadLine(); + _ = new Day1(); } } }