33import org .slf4j .Logger ;
44import org .slf4j .LoggerFactory ;
55
6+ import java .util .HashSet ;
67import java .util .List ;
8+ import java .util .Set ;
79
810public class Day04 {
911 private static final Logger LOGGER = LoggerFactory .getLogger (Day04 .class );
@@ -46,9 +48,9 @@ private long countXmas(int i, int j) {
4648
4749 // N, S, W, O
4850 count += lookingFor ("MAS" , i - 1 , j , -1 , 0 );
49- count += lookingFor ("MAS" , i + 1 , j , +1 , 0 );
50- count += lookingFor ("MAS" , i , j + 1 , 0 , +1 );
51- count += lookingFor ("MAS" , i , j - 1 , 0 , -1 );
51+ count += lookingFor ("MAS" , i + 1 , j , +1 , 0 );
52+ count += lookingFor ("MAS" , i , j + 1 , 0 , +1 );
53+ count += lookingFor ("MAS" , i , j - 1 , 0 , -1 );
5254
5355 return count ;
5456 }
@@ -69,7 +71,30 @@ private long lookingFor(String search, int i, int j, int dirI, int dirJ) {
6971 }
7072
7173 public long solvePart2 () {
74+ long sum = 0 ;
75+ for (int i = 1 ; i < input .size () - 1 ; i ++) {
76+ String l = input .get (i );
77+ for (int j = 1 ; j < l .length () - 1 ; j ++) {
78+ if (checkCrossMas (i , j )) {
79+ sum ++;
80+ }
81+ }
82+ }
83+ return sum ;
84+ }
7285
73- return 0 ;
86+
87+ private boolean checkCrossMas (int i , int j ) {
88+ return input .get (i ).charAt (j ) == 'A'
89+ && checkMandS (i - 1 , j - 1 , i + 1 , j + 1 )
90+ && checkMandS (i + 1 , j - 1 , i - 1 , j + 1 );
7491 }
92+
93+ private boolean checkMandS (int i , int j , int a , int b ) {
94+ Set <Character > foundChars = new HashSet <>();
95+ foundChars .add (input .get (i ).charAt (j ));
96+ foundChars .add (input .get (a ).charAt (b ));
97+ return foundChars .containsAll (Set .of ('M' , 'S' ));
98+ }
99+
75100}
0 commit comments