aoc2024/day04.sh
Patrick Michl 85ea5d299b
shfmt
2024-12-05 18:25:04 +01:00

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 "$@"