day04
This commit is contained in:
parent
937b633d8a
commit
843f0211b6
61
day04.sh
Executable file
61
day04.sh
Executable file
@ -0,0 +1,61 @@
|
|||||||
|
#!/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 "$@"
|
Loading…
x
Reference in New Issue
Block a user