Skip to content

Commit bf45143

Browse files
committed
AoC 2024 Day 11 - java
1 parent 760b9b7 commit bf45143

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
| | 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 |
1010
| ---| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
1111
| python3 | [](src/main/python/AoC2024_01.py) | [](src/main/python/AoC2024_02.py) | [](src/main/python/AoC2024_03.py) | [](src/main/python/AoC2024_04.py) | [](src/main/python/AoC2024_05.py) | [](src/main/python/AoC2024_06.py) | [](src/main/python/AoC2024_07.py) | [](src/main/python/AoC2024_08.py) | [](src/main/python/AoC2024_09.py) | [](src/main/python/AoC2024_10.py) | [](src/main/python/AoC2024_11.py) | | | | | | | | | | | | | | |
12-
| java | [](src/main/java/AoC2024_01.java) | [](src/main/java/AoC2024_02.java) | [](src/main/java/AoC2024_03.java) | [](src/main/java/AoC2024_04.java) | [](src/main/java/AoC2024_05.java) | [](src/main/java/AoC2024_06.java) | [](src/main/java/AoC2024_07.java) | [](src/main/java/AoC2024_08.java) | | [](src/main/java/AoC2024_10.java) | | | | | | | | | | | | | | | |
12+
| java | [](src/main/java/AoC2024_01.java) | [](src/main/java/AoC2024_02.java) | [](src/main/java/AoC2024_03.java) | [](src/main/java/AoC2024_04.java) | [](src/main/java/AoC2024_05.java) | [](src/main/java/AoC2024_06.java) | [](src/main/java/AoC2024_07.java) | [](src/main/java/AoC2024_08.java) | | [](src/main/java/AoC2024_10.java) | [](src/main/java/AoC2024_11.java) | | | | | | | | | | | | | | |
1313
| rust | [](src/main/rust/AoC2024_01/src/main.rs) | [](src/main/rust/AoC2024_02/src/main.rs) | [](src/main/rust/AoC2024_03/src/main.rs) | [](src/main/rust/AoC2024_04/src/main.rs) | [](src/main/rust/AoC2024_05/src/main.rs) | [](src/main/rust/AoC2024_06/src/main.rs) | [](src/main/rust/AoC2024_07/src/main.rs) | [](src/main/rust/AoC2024_08/src/main.rs) | | | | | | | | | | | | | | | | | |
1414
<!-- @END:ImplementationsTable:2024@ -->
1515

src/main/java/AoC2024_11.java

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import java.util.Arrays;
2+
import java.util.HashMap;
3+
import java.util.List;
4+
import java.util.Map;
5+
6+
import com.github.pareronia.aoc.solution.Sample;
7+
import com.github.pareronia.aoc.solution.Samples;
8+
import com.github.pareronia.aoc.solution.SolutionBase;
9+
10+
public final class AoC2024_11 extends SolutionBase<List<Long>, Long, Long> {
11+
12+
private AoC2024_11(final boolean debug) {
13+
super(debug);
14+
}
15+
16+
public static AoC2024_11 create() {
17+
return new AoC2024_11(false);
18+
}
19+
20+
public static AoC2024_11 createDebug() {
21+
return new AoC2024_11(true);
22+
}
23+
24+
@Override
25+
protected List<Long> parseInput(final List<String> inputs) {
26+
return Arrays.stream(inputs.get(0).split(" "))
27+
.map(Long::valueOf)
28+
.toList();
29+
}
30+
31+
private long solve(final List<Long> stones, final int blinks) {
32+
class Counter {
33+
record State(long stone, int cnt) {}
34+
35+
static final Map<State, Long> memo = new HashMap<>();
36+
37+
static long count(final long s, final int cnt) {
38+
final State state = new State(s, cnt);
39+
if (memo.containsKey(state)) {
40+
return memo.get(state);
41+
}
42+
long ans;
43+
if (cnt == 0) {
44+
ans = 1;
45+
} else if (s == 0) {
46+
ans = count(1, cnt - 1);
47+
} else if (String.valueOf(s).length() % 2 == 0) {
48+
final String ss = String.valueOf(s);
49+
final int length = ss.length();
50+
final long ss1 = Long.parseLong(ss.substring(0, length / 2));
51+
final long ss2 = Long.parseLong(ss.substring(length / 2));
52+
ans = count(ss1, cnt - 1) + count(ss2, cnt - 1);
53+
} else {
54+
ans = count(s * 2024, cnt - 1);
55+
}
56+
memo.put(state, ans);
57+
return ans;
58+
}
59+
}
60+
61+
return stones.stream().mapToLong(s -> Counter.count(s, blinks)).sum();
62+
}
63+
64+
@Override
65+
public Long solvePart1(final List<Long> stones) {
66+
return solve(stones, 25);
67+
}
68+
69+
@Override
70+
public Long solvePart2(final List<Long> stones) {
71+
return solve(stones, 75);
72+
}
73+
74+
@Override
75+
@Samples({
76+
@Sample(method = "part1", input = TEST, expected = "55312")
77+
})
78+
public void samples() {
79+
}
80+
81+
public static void main(final String[] args) throws Exception {
82+
AoC2024_11.create().run();
83+
}
84+
85+
private static final String TEST = """
86+
125 17
87+
""";
88+
}

0 commit comments

Comments
 (0)