-
Notifications
You must be signed in to change notification settings - Fork 20
/
Copy pathDay4.java
56 lines (46 loc) · 1.34 KB
/
Day4.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
package com.sbaars.adventofcode.year15.days;
import com.sbaars.adventofcode.common.Pair;
import com.sbaars.adventofcode.year15.Day2015;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import static com.sbaars.adventofcode.common.Pair.pair;
import static java.lang.Integer.MAX_VALUE;
import static java.util.stream.IntStream.range;
public class Day4 extends Day2015 {
public Day4() {
super(4);
}
public static void main(String[] args) {
new Day4().printParts();
}
@Override
public Object part1() {
return solution("00000");
}
@Override
public Object part2() {
return solution("000000");
}
private int solution(String prefix) {
String in = day().trim();
return range(0, MAX_VALUE)
.mapToObj(i -> pair(i, md5(in + i)))
.filter(s -> s.b().startsWith(prefix))
.map(Pair::a)
.findFirst()
.get();
}
public String md5(String md5) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : array) {
sb.append(Integer.toHexString((b & 0xFF) | 0x100), 1, 3);
}
return sb.toString();
} catch (NoSuchAlgorithmException ignored) {
}
throw new IllegalStateException("Unable to hash " + md5);
}
}