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
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdventOfCode.Extensions", "AdventOfCode.Extensions\AdventOfCode.Extensions.csproj", "{1466A0F6-7C88-47FF-B8F8-FF30368E26DC}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdventOfCode.Extensions", "AdventOfCode.Extensions\AdventOfCode.Extensions.csproj", "{1466A0F6-7C88-47FF-B8F8-FF30368E26DC}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdventOfCode.HelperClasses", "AdventOfCode.HelperClasses\AdventOfCode.HelperClasses.csproj", "{D47175BB-5AD6-43A8-9287-FF5E6F1816E3}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
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}.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.ActiveCfg = Release|Any CPU
|
||||||
{1466A0F6-7C88-47FF-B8F8-FF30368E26DC}.Release|Any CPU.Build.0 = 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
|
EndGlobalSection
|
||||||
GlobalSection(NestedProjects) = preSolution
|
GlobalSection(NestedProjects) = preSolution
|
||||||
{4F395AE3-DABB-4546-A4D0-5A62425FE168} = {05EBAA1C-B33B-4AFE-8635-A58D7CA509A7}
|
{4F395AE3-DABB-4546-A4D0-5A62425FE168} = {05EBAA1C-B33B-4AFE-8635-A58D7CA509A7}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\AdvenOfCode.Contracts\AdvenOfCode.Contracts.csproj" />
|
<ProjectReference Include="..\AdvenOfCode.Contracts\AdvenOfCode.Contracts.csproj" />
|
||||||
<ProjectReference Include="..\AdventOfCode.Extensions\AdventOfCode.Extensions.csproj" />
|
<ProjectReference Include="..\AdventOfCode.Extensions\AdventOfCode.Extensions.csproj" />
|
||||||
|
<ProjectReference Include="..\AdventOfCode.HelperClasses\AdventOfCode.HelperClasses.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
||||||
|
|
@ -7,13 +7,14 @@ using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using AdvenOfCode.Contracts;
|
using AdvenOfCode.Contracts;
|
||||||
using AdventOfCode.Extensions;
|
using AdventOfCode.Extensions;
|
||||||
|
using AdventOfCode.HelperClasses;
|
||||||
using Microsoft.Z3;
|
using Microsoft.Z3;
|
||||||
|
|
||||||
namespace AoC_2025;
|
namespace AoC_2025;
|
||||||
|
|
||||||
public class Day10 : IPuzzleSolver<long>
|
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)
|
var puzzleInput = File.ReadAllLines(path)
|
||||||
.Where(line => !string.IsNullOrWhiteSpace(line))
|
.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)))
|
.Select(lampIndexes => lampIndexes.Aggregate((uint)0L, (acc, lampIndex) => acc | ((uint)1 << lampIndex)))
|
||||||
.ToArray())
|
.ToArray())
|
||||||
.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
|
var res = lamps
|
||||||
.Zip(buttons, (lamp, button) => (lamp, button))
|
.Zip(buttons, (lamp, button) => (lamp, button))
|
||||||
.Zip(joltages, (bl, joltage) => (bl.lamp, bl.button, joltage))
|
|
||||||
.ToArray();
|
.ToArray();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
@ -273,26 +266,3 @@ public class Day10 : IPuzzleSolver<long>
|
||||||
return answer;
|
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