advent_of_code_2024/Level1/Level1Solver.cs

75 lines
1.8 KiB
C#

namespace AoC24;
using AoC24.Common;
using AoCLevelInputProvider;
using Parsing;
using Parsing.Schema;
public class Level1Solver : FullTextLevelSolverBase
{
public override int LevelNumber
{
get { return 1; }
}
protected override InputSchemaBuilder DefineInputSchema(InputSchemaBuilder schemaBuilder)
{
return schemaBuilder
.Repeat(2)
.Expect(InputType.Integer)
.EndRepetition();
}
public override string SolveFirstStar()
{
var data = this.GetData()
.AsListColumns<int>();
var sortedLeftColumn = data[0];
sortedLeftColumn.Sort();
var sortedRightColumn = data[1];
sortedRightColumn.Sort();
var sumDifferences = 0;
for (var i = 0; i < sortedLeftColumn.Count; i++)
{
sumDifferences += Math.Abs(sortedLeftColumn[i]-sortedRightColumn[i]);
}
return sumDifferences.ToString();
}
public override string SolveSecondStar()
{
var data = this.GetData()
.AsListColumns<int>();
var uniqueLeftColumn = data[0].Distinct();
var rightColumn = data[1];
Dictionary<int, int> numInstances = new Dictionary<int, int>();
foreach(var value in uniqueLeftColumn)
{
numInstances[value] = 0;
}
foreach(var value in rightColumn)
{
if (numInstances.ContainsKey(value))
{
numInstances[value] = numInstances[value] + 1;
}
}
var sumScore = 0;
foreach(var key in numInstances.Keys)
{
sumScore = sumScore + numInstances[key] * key;
}
return sumScore.ToString();
}
}