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 6223240

Browse files
Solved Day 14 (2015) - Reindeer Olympics
1 parent bf7f92d commit 6223240

File tree

1 file changed

+67
-17
lines changed
  • src/main/java/com/sbaars/adventofcode/year15/days

1 file changed

+67
-17
lines changed
Lines changed: 67 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,73 @@
11
package com.sbaars.adventofcode.year15.days;
22

33
import com.sbaars.adventofcode.year15.Day2015;
4+
import java.util.*;
5+
import java.util.regex.Matcher;
6+
import java.util.regex.Pattern;
7+
import java.util.stream.Collectors;
48

59
public class Day14 extends Day2015 {
6-
public Day14() {
7-
super(14);
8-
}
9-
10-
public static void main(String[] args) {
11-
new Day14().printParts();
12-
}
13-
14-
@Override
15-
public Object part1() {
16-
return "";
17-
}
18-
19-
@Override
20-
public Object part2() {
21-
return "";
22-
}
10+
11+
private static final int RACE_DURATION = 2503;
12+
private final List<Reindeer> reindeers = new ArrayList<>();
13+
14+
public Day14() {
15+
super(14);
16+
parseInput();
17+
}
18+
19+
public static void main(String[] args) {
20+
Day14 day = new Day14();
21+
day.printParts();
22+
new com.sbaars.adventofcode.network.Submit().submit(day.part1(), 2015, 14, 1);
23+
}
24+
25+
private void parseInput() {
26+
Pattern pattern = Pattern.compile("(\\w+) can fly (\\d+) km/s for (\\d+) seconds, but then must rest for (\\d+) seconds\\.");
27+
Arrays.stream(day().split("\n"))
28+
.map(pattern::matcher)
29+
.filter(Matcher::find)
30+
.map(matcher -> new Reindeer(
31+
matcher.group(1),
32+
Integer.parseInt(matcher.group(2)),
33+
Integer.parseInt(matcher.group(3)),
34+
Integer.parseInt(matcher.group(4))
35+
))
36+
.forEach(reindeers::add);
37+
}
38+
39+
@Override
40+
public Object part1() {
41+
return reindeers.stream()
42+
.mapToInt(reindeer -> reindeer.getDistanceAfter(RACE_DURATION))
43+
.max()
44+
.orElse(0);
45+
}
46+
47+
@Override
48+
public Object part2() {
49+
return 0; // Implement in next part
50+
}
51+
52+
private static class Reindeer {
53+
private final String name;
54+
private final int speed;
55+
private final int flyTime;
56+
private final int restTime;
57+
58+
public Reindeer(String name, int speed, int flyTime, int restTime) {
59+
this.name = name;
60+
this.speed = speed;
61+
this.flyTime = flyTime;
62+
this.restTime = restTime;
63+
}
64+
65+
public int getDistanceAfter(int seconds) {
66+
int cycleTime = flyTime + restTime;
67+
int completeCycles = seconds / cycleTime;
68+
int remainingSeconds = Math.min(flyTime, seconds % cycleTime);
69+
70+
return speed * (completeCycles * flyTime + remainingSeconds);
71+
}
72+
}
2373
}

0 commit comments

Comments
(0)

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