generated from mazharenko/aoc-agent-template-multipleyears
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay11.cs
60 lines (51 loc) · 1.17 KB
/
Day11.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using aoc.Common;
using mazharenko.AoCAgent.Generator;
namespace aoc.Year2024;
internal partial class Day11
{
internal partial class Part1
{
private readonly Example example = new(
"""
125 17
""", 55312L);
public long Solve(long[] input)
{
var countFunc = Count;
var countM = countFunc.MemoizeRec();
return input.Sum(x => countM(x, 25));
}
public long[] Parse(string input)
{
return Numerics.IntegerInt64.ManyDelimitedBySpaces().Parse(input);
}
}
[BypassNoExamples]
internal partial class Part2
{
public long Solve(long[] input)
{
var countFunc = Count;
var countM = countFunc.MemoizeRec();
return input.Sum(x => countM(x, 75));
}
public long[] Parse(string input)
{
return Numerics.IntegerInt64.ManyDelimitedBySpaces().Parse(input);
}
}
private static long Count(Func<long, int, long> countFunc, long n, int t)
{
if (t == 0)
return 1;
if (n == 0)
return countFunc(1, t - 1);
if (n.ToString().Length % 2 == 0)
{
var s = n.ToString();
return countFunc(long.Parse(s[..(s.Length / 2)]), t - 1)
+ countFunc(long.Parse(s[(s.Length / 2)..]), t - 1);
}
return countFunc(n * 2024, t - 1);
}
}