Skip to content

Commit 240da17

Browse files
committed
Day11 Part 2
1 parent 8778332 commit 240da17

File tree

2 files changed

+16
-23
lines changed

2 files changed

+16
-23
lines changed

src/adventofcode2024/Day11.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,8 @@ public Answer Solve(IEnumerable<string> lines)
1313
var line = lines.FirstOrDefault() ?? string.Empty;
1414
var stones = line.Split(' ').Select(long.Parse);
1515

16-
var finalStones = BlinkTimes(stones, 25);
17-
18-
part1 += finalStones.Count;
16+
part1 += stones.Sum(s => GetBlinkedCount(s, 25));
17+
part2 += stones.Sum(s => GetBlinkedCount(s, 75));
1918

2019
return new Answer()
2120
{
@@ -24,21 +23,21 @@ public Answer Solve(IEnumerable<string> lines)
2423
};
2524
}
2625

27-
public ICollection<long> BlinkTimes(IEnumerable<long> stones, int blinkTimes)
28-
{
29-
return stones
30-
.SelectMany(s => BlinkStone(s, blinkTimes))
31-
.ToArray();
32-
}
26+
private readonly Dictionary<(long, int), long> _resultCountByStoneBlinksLeft = [];
3327

34-
private IEnumerable<long> BlinkStone(long stone, int blinkTimes)
28+
private long GetBlinkedCount(long stone, int blinkTimes)
3529
{
3630
if (blinkTimes == 0)
3731
{
38-
return [stone];
32+
return 1;
3933
}
4034

4135
blinkTimes--;
36+
37+
if (_resultCountByStoneBlinksLeft.TryGetValue((stone, blinkTimes), out var cachedCount))
38+
{
39+
return cachedCount;
40+
}
4241

4342
var stones = new List<long>();
4443

@@ -61,6 +60,10 @@ private IEnumerable<long> BlinkStone(long stone, int blinkTimes)
6160
stones.Add(stone * 2024);
6261
}
6362

64-
return stones.SelectMany(s => BlinkStone(s, blinkTimes));
63+
var count = stones.Sum(s => GetBlinkedCount(s, blinkTimes));
64+
65+
_resultCountByStoneBlinksLeft.TryAdd((stone, blinkTimes), count);
66+
67+
return count;
6568
}
6669
}

tests/adventofcode2024.UnitTests/Day11Tests.cs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,12 @@ public class Day11Tests
55
[Test]
66
[Arguments("""
77
125 17
8-
""", 55312, 0)]
8+
""", 55312, 65601038650482)]
99
public async Task Solve(string input, long expectedPart1, long expectedPart2)
1010
{
1111
var actualAnswer = new Day11().Solve(input.Split(Environment.NewLine));
1212

1313
await Assert.That(actualAnswer.Part1).IsEqualTo(expectedPart1);
1414
await Assert.That(actualAnswer.Part2).IsEqualTo(expectedPart2);
1515
}
16-
17-
[Test]
18-
[Arguments("""
19-
125 17
20-
""", 6, 22)]
21-
public async Task Part1(string input, int blinkTimes, long expectedCount)
22-
{
23-
var stones = new Day11().BlinkTimes(input.Split(" ").Select(long.Parse).ToArray(), blinkTimes);
24-
await Assert.That(stones.Count).IsEqualTo((int)expectedCount);
25-
}
2616
}

0 commit comments

Comments
 (0)