77 lines
2.7 KiB
C#
77 lines
2.7 KiB
C#
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<Int32, Int32>(pairsArray.Length);
|
|
var list2 = new SortedList<Int32, Int32>(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<Int32, Int32>(list1);
|
|
var list2Copy = new SortedList<Int32, Int32>(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();
|
|
}
|
|
}
|
|
}
|