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