-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay13A.java
59 lines (45 loc) · 1.96 KB
/
Day13A.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package advent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
public class Day13A {
public static void main(String[] args) throws IOException {
final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Paste the input:");
String readFirstLine = bufferedReader.readLine();
int currentTime = Integer.parseInt(readFirstLine.trim());
ArrayList<Integer> buses = new ArrayList<>();
String readLine;
do {
readLine = bufferedReader.readLine();
if (readLine != null && !readLine.isEmpty()) {
for (String bus : readLine.trim().split(",")) {
if (!bus.equals("x")) {
buses.add(Integer.parseInt(bus));
}
}
} else {
break;
}
} while (true);
bufferedReader.close();
System.out.println("Got " + buses.size() + " buses");
final Instant start = Instant.now();
int closestBus = 0;
double closestValue = 0;
for (Integer bus : buses) {
double value = (((double) currentTime) / ((double) bus)) - (currentTime / bus);
// System.out.println("bus " + bus + " value " + value + " = " + (((double) currentTime) / ((double) bus)) + " - " + (currentTime / bus));
if (closestValue < value) {
closestBus = bus;
closestValue = value;
}
}
final Instant finish = Instant.now();
final long timeElapsed = Duration.between(start, finish).toMillis();
System.out.println("closestBus " + closestBus + " wait " + (closestBus - (currentTime % closestBus)) + " yields " + (closestBus * (closestBus - (currentTime % closestBus))) + " in " + timeElapsed + "ms");
}
}