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