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 4394395

Browse files
Refactor Day 7 2016 to be more functional. Added pattern finding utility method and improved string operations efficiency.
1 parent d412709 commit 4394395

File tree

1 file changed

+12
-22
lines changed
  • src/main/java/com/sbaars/adventofcode/year16/days

1 file changed

+12
-22
lines changed

‎src/main/java/com/sbaars/adventofcode/year16/days/Day7.java‎

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.*;
55
import java.util.regex.Matcher;
66
import java.util.regex.Pattern;
7+
import java.util.stream.IntStream;
78

89
public class Day7 extends Day2016 {
910
public Day7() {
@@ -33,31 +34,14 @@ public boolean supportsTLS() {
3334
}
3435

3536
public boolean supportsSSL() {
36-
Set<String> abas = new HashSet<>();
37-
for (String supernet : supernets) {
38-
for (int i = 0; i < supernet.length() - 2; i++) {
39-
if (isABA(supernet, i)) {
40-
abas.add(supernet.substring(i, i + 3));
41-
}
42-
}
43-
}
44-
45-
for (String aba : abas) {
46-
String bab = "" + aba.charAt(1) + aba.charAt(0) + aba.charAt(1);
47-
if (hypernets.stream().anyMatch(h -> h.contains(bab))) {
48-
return true;
49-
}
50-
}
51-
return false;
37+
return supernets.stream()
38+
.flatMap(s -> findPatterns(s, 3, IPv7::isABA))
39+
.map(aba -> new String(new char[]{aba.charAt(1), aba.charAt(0), aba.charAt(1)}))
40+
.anyMatch(bab -> hypernets.stream().anyMatch(h -> h.contains(bab)));
5241
}
5342

5443
private static boolean hasABBA(String s) {
55-
for (int i = 0; i < s.length() - 3; i++) {
56-
if (isABBA(s, i)) {
57-
return true;
58-
}
59-
}
60-
return false;
44+
return findPatterns(s, 4, IPv7::isABBA).findAny().isPresent();
6145
}
6246

6347
private static boolean isABBA(String s, int i) {
@@ -70,6 +54,12 @@ private static boolean isABA(String s, int i) {
7054
return s.charAt(i) == s.charAt(i + 2) &&
7155
s.charAt(i) != s.charAt(i + 1);
7256
}
57+
58+
private static java.util.stream.Stream<String> findPatterns(String s, int length, java.util.function.BiPredicate<String, Integer> matcher) {
59+
return IntStream.range(0, s.length() - length + 1)
60+
.filter(i -> matcher.test(s, i))
61+
.mapToObj(i -> s.substring(i, i + length));
62+
}
7363
}
7464

7565
@Override

0 commit comments

Comments
(0)

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