Extract `IntArrayEqualityComparer` to new `AdventOfCode.HelperClasses` project and refactor solution to use the shared class
This commit is contained in:
parent
d0b612154a
commit
85516cd783
|
|
@ -0,0 +1,9 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
namespace AdventOfCode.HelperClasses;
|
||||
|
||||
public class IntArrayEqualityComparer : IEqualityComparer<int[]>
|
||||
{
|
||||
public bool Equals(int[]? x, int[]? y)
|
||||
{
|
||||
if (x is null || y is null || x.Length != y.Length) return false;
|
||||
|
||||
return !x.Where((t, i) => t != y[i]).Any();
|
||||
}
|
||||
|
||||
public int GetHashCode(int[] obj)
|
||||
{
|
||||
var result = 17;
|
||||
foreach (var t in obj)
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
result = result * 23 + t;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
|
@ -12,6 +12,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdvenOfCode.Contracts", "Ad
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdventOfCode.Extensions", "AdventOfCode.Extensions\AdventOfCode.Extensions.csproj", "{1466A0F6-7C88-47FF-B8F8-FF30368E26DC}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdventOfCode.HelperClasses", "AdventOfCode.HelperClasses\AdventOfCode.HelperClasses.csproj", "{D47175BB-5AD6-43A8-9287-FF5E6F1816E3}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
|
@ -38,6 +40,10 @@ Global
|
|||
{1466A0F6-7C88-47FF-B8F8-FF30368E26DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1466A0F6-7C88-47FF-B8F8-FF30368E26DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1466A0F6-7C88-47FF-B8F8-FF30368E26DC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D47175BB-5AD6-43A8-9287-FF5E6F1816E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D47175BB-5AD6-43A8-9287-FF5E6F1816E3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D47175BB-5AD6-43A8-9287-FF5E6F1816E3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D47175BB-5AD6-43A8-9287-FF5E6F1816E3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{4F395AE3-DABB-4546-A4D0-5A62425FE168} = {05EBAA1C-B33B-4AFE-8635-A58D7CA509A7}
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
<ItemGroup>
|
||||
<ProjectReference Include="..\AdvenOfCode.Contracts\AdvenOfCode.Contracts.csproj" />
|
||||
<ProjectReference Include="..\AdventOfCode.Extensions\AdventOfCode.Extensions.csproj" />
|
||||
<ProjectReference Include="..\AdventOfCode.HelperClasses\AdventOfCode.HelperClasses.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -7,13 +7,14 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using AdvenOfCode.Contracts;
|
||||
using AdventOfCode.Extensions;
|
||||
using AdventOfCode.HelperClasses;
|
||||
using Microsoft.Z3;
|
||||
|
||||
namespace AoC_2025;
|
||||
|
||||
public class Day10 : IPuzzleSolver<long>
|
||||
{
|
||||
private (uint lamps, uint[] buttons, int[] joltages)[] ParsePuzzleInput(string path)
|
||||
private (uint lamps, uint[] buttons)[] ParsePuzzleInput(string path)
|
||||
{
|
||||
var puzzleInput = File.ReadAllLines(path)
|
||||
.Where(line => !string.IsNullOrWhiteSpace(line))
|
||||
|
|
@ -41,16 +42,8 @@ public class Day10 : IPuzzleSolver<long>
|
|||
.Select(lampIndexes => lampIndexes.Aggregate((uint)0L, (acc, lampIndex) => acc | ((uint)1 << lampIndex)))
|
||||
.ToArray())
|
||||
.ToArray();
|
||||
var joltages = puzzleInput
|
||||
.Select(input => input.joltages)
|
||||
.Select(joltage => joltage
|
||||
.Split(',', StringSplitOptions.RemoveEmptyEntries)
|
||||
.Select(jolt => int.Parse(jolt))
|
||||
.ToArray())
|
||||
.ToArray();
|
||||
var res = lamps
|
||||
.Zip(buttons, (lamp, button) => (lamp, button))
|
||||
.Zip(joltages, (bl, joltage) => (bl.lamp, bl.button, joltage))
|
||||
.ToArray();
|
||||
return res;
|
||||
}
|
||||
|
|
@ -272,27 +265,4 @@ public class Day10 : IPuzzleSolver<long>
|
|||
var answer = answerExpression is IntNum number ? number.Int64 : 0;
|
||||
return answer;
|
||||
}
|
||||
}
|
||||
|
||||
public class IntArrayEqualityComparer : IEqualityComparer<int[]>
|
||||
{
|
||||
public bool Equals(int[]? x, int[]? y)
|
||||
{
|
||||
if (x is null || y is null || x.Length != y.Length) return false;
|
||||
|
||||
return !x.Where((t, i) => t != y[i]).Any();
|
||||
}
|
||||
|
||||
public int GetHashCode(int[] obj)
|
||||
{
|
||||
var result = 17;
|
||||
foreach (var t in obj)
|
||||
{
|
||||
unchecked
|
||||
{
|
||||
result = result * 23 + t;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue