diff --git a/bin/day2404.ml b/bin/day2404.ml index a329b9b..7f7e169 100644 --- a/bin/day2404.ml +++ b/bin/day2404.ml @@ -43,5 +43,28 @@ let find_xmas sa = List.fold_left (fun acc x -> acc + search_string x "XMAS") 0 search_strings + List.fold_left (fun acc x -> acc + search_string x "SAMX") 0 search_strings +let find_mas sa x y = + let find_ms a b c d = + sa.(y - 1).[x - 1] = a + && sa.(y - 1).[x + 1] = b + && sa.(y + 1).[x - 1] = c + && sa.(y + 1).[x + 1] = d + in + sa.(y).[x] = 'A' + && (find_ms 'M' 'M' 'S' 'S' || find_ms 'S' 'S' 'M' 'M' + || find_ms 'M' 'S' 'M' 'S' || find_ms 'S' 'M' 'S' 'M') + +let find_mases sa = + let acc = ref 0 in + for y = 1 to Array.length sa - 2 do + for x = 1 to String.length sa.(y) - 2 do + if find_mas sa x y then acc := !acc + 1 + done + done; + !acc + let sa_of_file fname = Aoc.strings_of_file fname |> Array.of_list -let _ = Aoc.main sa_of_file [ (string_of_int, find_xmas) ] + +let _ = + Aoc.main sa_of_file + [ (string_of_int, find_xmas); (string_of_int, find_mases) ]