64 lines
1.4 KiB
Bash
Executable File
64 lines
1.4 KiB
Bash
Executable File
#!/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 "$@"
|