Refactor Day10 to rename variables and improve readability in `GetMinCountInternal`
This commit is contained in:
parent
90b4e59171
commit
801b96de1d
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue