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()));
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue