4
4
import java .util .*;
5
5
import java .util .regex .Matcher ;
6
6
import java .util .regex .Pattern ;
7
+ import java .util .stream .IntStream ;
7
8
8
9
public class Day7 extends Day2016 {
9
10
public Day7 () {
@@ -33,31 +34,14 @@ public boolean supportsTLS() {
33
34
}
34
35
35
36
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 )));
52
41
}
53
42
54
43
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 ();
61
45
}
62
46
63
47
private static boolean isABBA (String s , int i ) {
@@ -70,6 +54,12 @@ private static boolean isABA(String s, int i) {
70
54
return s .charAt (i ) == s .charAt (i + 2 ) &&
71
55
s .charAt (i ) != s .charAt (i + 1 );
72
56
}
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
+ }
73
63
}
74
64
75
65
@ Override
0 commit comments