#!/usr/bin/env bash unset PATH; readonly PATH source ./utils/main.sh count_patterns_occurences() { local input="$1"; shift local patterns=("$@") result=0 for pattern in "${patterns[@]}"; do local text="$input" while [[ -n "$text" ]]; do if [[ "$text" =~ $pattern ]]; then ((result++)) text="${text#*"${BASH_REMATCH[0]}"}" text="${BASH_REMATCH[0]:1}$text" else text='' fi done done printf '%d' "$result" } p1() { local input="$1" line result=0 cols=0 read -ra line <<< "$input" cols="$((${#line}+1))" local patterns=( "XMAS" "SAMX" "X.{$((cols))}M.{$((cols))}A.{$((cols))}S" "S.{$((cols))}A.{$((cols))}M.{$((cols))}X" "X.{$((cols-1))}M.{$((cols-1))}A.{$((cols-1))}S" "S.{$((cols-1))}A.{$((cols-1))}M.{$((cols-1))}X" "X.{$((cols-2))}M.{$((cols-2))}A.{$((cols-2))}S" "S.{$((cols-2))}A.{$((cols-2))}M.{$((cols-2))}X" ) count_patterns_occurences "$input" "${patterns[@]}" } p2() { local input="$1" line result=0 cols=0 read -ra line <<< "$input" cols="$((${#line}+1))" local patterns=( "M.M.{$((cols-2))}A.{$((cols-2))}S.S" "M.S.{$((cols-2))}A.{$((cols-2))}M.S" "S.M.{$((cols-2))}A.{$((cols-2))}S.M" "S.S.{$((cols-2))}A.{$((cols-2))}M.M" ) count_patterns_occurences "$input" "${patterns[@]}" } main "$@"