Refactor Day10 to rename variables and improve readability in `GetMinCountInternal`

This commit is contained in:
Sebastian Lindemeier 2025-12-12 11:49:23 +01:00
parent 90b4e59171
commit 801b96de1d
1 changed files with 11 additions and 8 deletions

View File

@ -181,18 +181,21 @@ public class Day10 : IPuzzleSolver<long>
var res = GetMinCountInternal(joltages, patternCosts, new Dictionary<int[], long>(new IntArrayEqualityComparer()));
return res;
static long GetMinCountInternal(int[] joltages, (int[] joltages, int cots)[] patternCosts, Dictionary<int[], long> memory)
static long GetMinCountInternal(int[] targetJoltages, (int[] joltages, int cots)[] patternCosts, Dictionary<int[], long> memory)
{
if (joltages.All(j => j == 0)) return 0;
if (memory.TryGetValue(joltages, out var knownResult)) return knownResult;
if (targetJoltages.All(j => j == 0)) return 0;
if (memory.TryGetValue(targetJoltages, out var knownResult)) return knownResult;
var minCount = 1_000_000_000L;
var joltageLevels = patternCosts
.Where(pc => pc.joltages.Zip(joltages, (pJolt, jJolt) => (pJolt % 2) == (jJolt % 2)).All(isEqual => isEqual))
var patternsToCheck = patternCosts
.Where(pc =>
pc.joltages
.Zip(targetJoltages, (pJolt, tJolt) => (pJolt % 2) == (tJolt % 2))
.All(isEqual => isEqual))
.ToArray();
foreach (var (joltageLevel, buttonPresses) in joltageLevels)
foreach (var (joltageLevel, buttonPresses) in patternsToCheck)
{
var nextPattern = joltages.Zip(joltageLevel, (jolts, level) => (jolts - level) / 2).ToArray();
var nextPattern = targetJoltages.Zip(joltageLevel, (jolts, level) => (jolts - level) / 2).ToArray();
var resultNext = 2 * GetMinCountInternal(nextPattern, patternCosts, memory) + buttonPresses;
if (resultNext < minCount)
{
@ -200,7 +203,7 @@ public class Day10 : IPuzzleSolver<long>
}
}
memory[joltages] = minCount;
memory[targetJoltages] = minCount;
return minCount;
}
}