-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathDay15.java
41 lines (33 loc) · 1.04 KB
/
Day15.java
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
package com.sbaars.adventofcode.year20.days;
import com.sbaars.adventofcode.year20.Day2020;
import java.util.HashMap;
import java.util.Map;
import static java.util.stream.IntStream.range;
public class Day15 extends Day2020 {
public Day15() {
super(15);
}
public static void main(String[] args) {
new Day15().printParts();
}
@Override
public Object part1() {
return getSolution(2020L);
}
@Override
public Object part2() {
return getSolution(30000000L);
}
private long getSolution(long offset) {
Map<Long, Long> turnNumbers = new HashMap<>();
long[] nums = dayNumbers(",");
range(0, nums.length - 1).forEach(i -> turnNumbers.put(nums[i], (long) i));
long lastNumber = nums[nums.length - 1];
for (long turnNumber = turnNumbers.size(); turnNumber < offset - 1; turnNumber++) {
long newLastNumber = turnNumbers.containsKey(lastNumber) ? turnNumber - turnNumbers.get(lastNumber) : 0;
turnNumbers.put(lastNumber, turnNumber);
lastNumber = newLastNumber;
}
return lastNumber;
}
}