shfmt
This commit is contained in:
parent
3844e5c87c
commit
85ea5d299b
22
day01.sh
22
day01.sh
@ -1,26 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
unset PATH; readonly PATH
|
||||
unset PATH
|
||||
readonly PATH
|
||||
source ./utils/main.sh
|
||||
source ./utils/array.sh
|
||||
|
||||
p1() {
|
||||
local input="$1" a b tmp i
|
||||
local left=() right=() res=()
|
||||
|
||||
|
||||
|
||||
while read -r a b; do
|
||||
left+=("$a")
|
||||
right+=("$b")
|
||||
done <<< "$input"
|
||||
done <<<"$input"
|
||||
|
||||
array.timsort left
|
||||
array.timsort right
|
||||
|
||||
for ((i=0; i < ${#left[@]}; i++)); do
|
||||
for ((i = 0; i < ${#left[@]}; i++)); do
|
||||
tmp="$((left[i] - right[i]))"
|
||||
echo "${left[$i]} - ${right[$i]} = ${tmp#-}"
|
||||
res+=("${tmp#-}")
|
||||
done > log
|
||||
done
|
||||
|
||||
array.sum res
|
||||
}
|
||||
@ -28,19 +27,18 @@ p1() {
|
||||
p2() {
|
||||
local input="$1" a b i j
|
||||
local left=() right=() res=()
|
||||
|
||||
|
||||
|
||||
while read -r a b; do
|
||||
left+=("$a")
|
||||
right+=("$b")
|
||||
done <<< "$input"
|
||||
done <<<"$input"
|
||||
|
||||
for i in "${left[@]}"; do
|
||||
local tmp=0
|
||||
for j in "${right[@]}"; do
|
||||
(( i == j )) && ((tmp++))
|
||||
((i == j)) && ((tmp++))
|
||||
done
|
||||
res+=("$((i*tmp))")
|
||||
res+=("$((i * tmp))")
|
||||
done
|
||||
|
||||
array.sum res
|
||||
|
21
day02.sh
21
day02.sh
@ -1,14 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
unset PATH; readonly PATH
|
||||
unset PATH
|
||||
readonly PATH
|
||||
source ./utils/main.sh
|
||||
source ./utils/array.sh
|
||||
|
||||
is_report_valid() {
|
||||
local report=() current_sign='' i=0
|
||||
read -ra report <<< "$1"
|
||||
|
||||
for (( i = 0; i < ${#report[@]} - 1; i++ )); do
|
||||
local a="${report[i]}" b="${report[i+1]}" diff='' sign=''
|
||||
read -ra report <<<"$1"
|
||||
|
||||
for ((i = 0; i < ${#report[@]} - 1; i++)); do
|
||||
local a="${report[i]}" b="${report[i + 1]}" diff='' sign=''
|
||||
diff="$((a - b))"
|
||||
((${diff#-} >= 1 && ${diff#-} <= 3)) || return 1
|
||||
|
||||
@ -30,7 +31,7 @@ p1() {
|
||||
|
||||
while read -r line; do
|
||||
is_report_valid "$line" && ((result++))
|
||||
done <<< "$input"
|
||||
done <<<"$input"
|
||||
|
||||
printf '%d' "$result"
|
||||
}
|
||||
@ -40,17 +41,17 @@ p2() {
|
||||
|
||||
while read -r line; do
|
||||
local original_report
|
||||
read -ra original_report <<< "$line"
|
||||
read -ra original_report <<<"$line"
|
||||
|
||||
is_report_valid "$line" && ((result++)) && continue
|
||||
|
||||
for (( i = 0; i < ${#original_report[@]}; i++ )); do
|
||||
for ((i = 0; i < ${#original_report[@]}; i++)); do
|
||||
local report
|
||||
report=("${original_report[@]::"$i"}" "${original_report[@]:"$((i+1))"}")
|
||||
report=("${original_report[@]::"$i"}" "${original_report[@]:"$((i + 1))"}")
|
||||
|
||||
is_report_valid "${report[*]}" && ((result++)) && continue 2
|
||||
done
|
||||
done <<< "$input"
|
||||
done <<<"$input"
|
||||
|
||||
printf '%d' "$result"
|
||||
}
|
||||
|
11
day03.sh
11
day03.sh
@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
unset PATH; readonly PATH
|
||||
unset PATH
|
||||
readonly PATH
|
||||
source ./utils/main.sh
|
||||
|
||||
p1() {
|
||||
@ -23,11 +24,11 @@ p2() {
|
||||
while [[ -n "$input" ]]; do
|
||||
if [[ "$input" =~ mul\(([0-9]{1,3}),([0-9]{1,3})\)|do\(\)|don\'t\(\) ]]; then
|
||||
case "${BASH_REMATCH[0]}" in
|
||||
do\(\)) do=true;;
|
||||
don\'t\(\)) do=false;;
|
||||
*) [[ "$do" == true ]] && result="$((result + (BASH_REMATCH[1] * BASH_REMATCH[2])))";;
|
||||
do\(\)) do=true ;;
|
||||
don\'t\(\)) do=false ;;
|
||||
*) [[ "$do" == true ]] && result="$((result + (BASH_REMATCH[1] * BASH_REMATCH[2])))" ;;
|
||||
esac
|
||||
|
||||
|
||||
input="${input#*"${BASH_REMATCH[0]}"}"
|
||||
else
|
||||
input=''
|
||||
|
30
day04.sh
30
day04.sh
@ -1,9 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
unset PATH; readonly PATH
|
||||
unset PATH
|
||||
readonly PATH
|
||||
source ./utils/main.sh
|
||||
|
||||
count_patterns_occurences() {
|
||||
local input="$1"; shift
|
||||
local input="$1"
|
||||
shift
|
||||
local patterns=("$@") result=0
|
||||
|
||||
for pattern in "${patterns[@]}"; do
|
||||
@ -25,18 +27,18 @@ count_patterns_occurences() {
|
||||
p1() {
|
||||
local input="$1" line result=0 cols=0
|
||||
|
||||
read -ra line <<< "$input"
|
||||
cols="$((${#line}+1))"
|
||||
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"
|
||||
"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[@]}"
|
||||
@ -45,14 +47,14 @@ p1() {
|
||||
p2() {
|
||||
local input="$1" line result=0 cols=0
|
||||
|
||||
read -ra line <<< "$input"
|
||||
cols="$((${#line}+1))"
|
||||
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"
|
||||
"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[@]}"
|
||||
|
33
day05.sh
33
day05.sh
@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env bash
|
||||
unset PATH; readonly PATH
|
||||
unset PATH
|
||||
readonly PATH
|
||||
source ./utils/main.sh
|
||||
|
||||
p1() {
|
||||
@ -9,25 +10,25 @@ p1() {
|
||||
while read -r line; do
|
||||
[[ -z "$line" ]] && continue
|
||||
case "$line" in
|
||||
[0-9]*\|[0-9]*) rules+=([${line%|*}]="${rules["${line%|*}"]:-} ${line#*|}");;
|
||||
*) pages+=("$line");;
|
||||
[0-9]*\|[0-9]*) rules+=([${line%|*}]="${rules["${line%|*}"]:-} ${line#*|}") ;;
|
||||
*) pages+=("$line") ;;
|
||||
esac
|
||||
done <<< "$input"
|
||||
done <<<"$input"
|
||||
|
||||
for page in "${pages[@]}"; do
|
||||
local page_arr
|
||||
IFS=, read -ra page_arr <<< "$page"
|
||||
IFS=, read -ra page_arr <<<"$page"
|
||||
|
||||
for ((i=0; i < ${#page_arr[@]}; i++)); do
|
||||
for ((i = 0; i < ${#page_arr[@]}; i++)); do
|
||||
local current_page="${page_arr[i]}"
|
||||
local current_rules="${rules["$current_page"]:-}"
|
||||
[[ -z "${current_rules:-}" ]] && continue
|
||||
|
||||
for ((j=0; j < ${#page_arr[@]}; j++)); do
|
||||
for ((j = 0; j < ${#page_arr[@]}; j++)); do
|
||||
[[ "$current_rules" =~ ${page_arr[j]} ]] && ((j < i)) && continue 3
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
result="$((result + ${page_arr[$(((${#page_arr[@]} - 1) / 2))]}))"
|
||||
done
|
||||
|
||||
@ -41,24 +42,24 @@ p2() {
|
||||
while read -r line; do
|
||||
[[ -z "$line" ]] && continue
|
||||
case "$line" in
|
||||
[0-9]*\|[0-9]*) rules+=([${line%|*}]="${rules["${line%|*}"]:-} ${line#*|}");;
|
||||
*) pages+=("$line");;
|
||||
[0-9]*\|[0-9]*) rules+=([${line%|*}]="${rules["${line%|*}"]:-} ${line#*|}") ;;
|
||||
*) pages+=("$line") ;;
|
||||
esac
|
||||
done <<< "$input"
|
||||
done <<<"$input"
|
||||
|
||||
for page in "${pages[@]}"; do
|
||||
local page_arr incorrect='false'
|
||||
IFS=, read -ra page_arr <<< "$page"
|
||||
IFS=, read -ra page_arr <<<"$page"
|
||||
|
||||
for ((i=0; i < ${#page_arr[@]}; i++)); do
|
||||
for ((i = 0; i < ${#page_arr[@]}; i++)); do
|
||||
local current_page="${page_arr[i]}"
|
||||
local current_rules="${rules["$current_page"]:-}"
|
||||
[[ -z "${current_rules:-}" ]] && continue
|
||||
|
||||
for ((j=0; j < ${#page_arr[@]}; j++)); do
|
||||
for ((j = 0; j < ${#page_arr[@]}; j++)); do
|
||||
if [[ "$current_rules" =~ ${page_arr[j]} ]] && ((j < i)); then
|
||||
local removed_elem="${page_arr[j]}"
|
||||
read -ra page_arr <<< "${page_arr[*]/"$removed_elem"}"
|
||||
read -ra page_arr <<<"${page_arr[*]/"$removed_elem"/}"
|
||||
page_arr=("${page_arr[@]:0:$i}" "$removed_elem" "${page_arr[@]:$i}")
|
||||
incorrect='true'
|
||||
((i--))
|
||||
@ -66,7 +67,7 @@ p2() {
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
|
||||
[[ "$incorrect" == 'true' ]] && result="$((result + ${page_arr[$(((${#page_arr[@]} - 1) / 2))]}))"
|
||||
done
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user