rename repo, subdir for yearly challenges
This commit is contained in:
55
2020/day01/ex2-pure-sort.bash
Executable file
55
2020/day01/ex2-pure-sort.bash
Executable file
@@ -0,0 +1,55 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# ex2-pure-sort.bash: Advent2020 game, day 1/game 2, bash bubble sort.
|
||||
|
||||
CMD=${0##*/}
|
||||
|
||||
readarray -t numbers
|
||||
|
||||
# simple bubble sort for numeric array (ascending)
|
||||
# args: 1: the array
|
||||
# todo: add a parameter for asc/desc order.
|
||||
sort_n() {
|
||||
local -a array=( "$@" )
|
||||
local -i max=$(( ${#array[@]} - 1 ))
|
||||
|
||||
for (( max= $(( ${#array[@]} - 1 )); max > 0; max-- )); do
|
||||
local -i i
|
||||
for (( i=0; i<max; i++ )); do
|
||||
local -i val1=${array[$i]}
|
||||
local -i val2=${array[$((i + 1))]}
|
||||
|
||||
# switch if necessary
|
||||
if (( val1 > val2 )); then
|
||||
local tmp=$val1
|
||||
array[$i]=$val2
|
||||
array[$((i + 1))]=$tmp
|
||||
fi
|
||||
done
|
||||
done
|
||||
echo "${array[@]}"
|
||||
}
|
||||
|
||||
sorted=( $(sort_n "${numbers[@]}") )
|
||||
|
||||
declare -i i j k a b c
|
||||
|
||||
for ((i=0; i<${#sorted[@]}; ++i)); do
|
||||
a=$((sorted[i]))
|
||||
for ((j=i+1; j<${#sorted[@]}; ++j)); do
|
||||
b=$((sorted[j]))
|
||||
((a+b > 2020)) && break
|
||||
for ((k=j+1; k<${#sorted[@]}; ++k)); do
|
||||
c=$((sorted[k]))
|
||||
((a+b+c > 2020)) && break
|
||||
if ((a+b+c == 2020)); then
|
||||
printf "${CMD} : %d:%d %d:%d %d:%d sum=%d mul=%d\n" \
|
||||
$i $a $j $b $k $c \
|
||||
$((a+b+c)) \
|
||||
$((a*b*c))
|
||||
break 3
|
||||
fi
|
||||
done
|
||||
done
|
||||
done
|
||||
exit 0
|
Reference in New Issue
Block a user