Skip to content

Commit 0ab3e7c

Browse files
committed
Solved Day 20 part 2 (2015) - Infinite Elves and Infinite Houses
1 parent 5a4a69d commit 0ab3e7c

File tree

1 file changed

+14
-6
lines changed
  • src/main/java/com/sbaars/adventofcode/year15/days

1 file changed

+14
-6
lines changed

src/main/java/com/sbaars/adventofcode/year15/days/Day20.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public Day20() {
1616
public static void main(String[] args) {
1717
Day20 day = new Day20();
1818
day.printParts();
19-
new com.sbaars.adventofcode.network.Submit().submit(day.part1(), 2015, 20, 1);
19+
new com.sbaars.adventofcode.network.Submit().submit(day.part2(), 2015, 20, 2);
2020
}
2121

2222
@Override
@@ -30,7 +30,18 @@ public Object part1() {
3030

3131
@Override
3232
public Object part2() {
33-
return 0; // Implement in next part
33+
int houseNumber = 1;
34+
while (getPresentsForHousePart2(houseNumber) < TARGET_PRESENTS) {
35+
houseNumber++;
36+
}
37+
return houseNumber;
38+
}
39+
40+
private int getPresentsForHousePart2(int houseNumber) {
41+
return getDivisors(houseNumber).stream()
42+
.filter(elf -> houseNumber / elf <= 50) // Each Elf only visits 50 houses
43+
.mapToInt(elf -> elf * 11) // Each Elf delivers 11 presents
44+
.sum();
3445
}
3546

3647
private int getPresentsForHouse(int houseNumber) {
@@ -41,15 +52,12 @@ private int getPresentsForHouse(int houseNumber) {
4152

4253
private Set<Integer> getDivisors(int number) {
4354
Set<Integer> divisors = new HashSet<>();
44-
int sqrt = (int) Math.sqrt(number);
45-
46-
for (int i = 1; i <= sqrt; i++) {
55+
for (int i = 1; i <= Math.sqrt(number); i++) {
4756
if (number % i == 0) {
4857
divisors.add(i);
4958
divisors.add(number / i);
5059
}
5160
}
52-
5361
return divisors;
5462
}
5563
}

0 commit comments

Comments
 (0)