Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 0ab3e7c

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /