From 5b0a1d7b53a02c1608f62612821c650229b4bf22 Mon Sep 17 00:00:00 2001 From: Bruno Raoult Date: Fri, 30 Jul 2021 20:07:45 +0200 Subject: [PATCH] remove faulty use of sort command (implement qsort in pure bash) --- 2020/day10/OUTPUT | 12 +++++------- 2020/day10/ex1.bash | 26 ++++++++++++++++++++++++-- 2020/day10/ex2.bash | 26 ++++++++++++++++++++++++-- 3 files changed, 53 insertions(+), 11 deletions(-) diff --git a/2020/day10/OUTPUT b/2020/day10/OUTPUT index 100a55d..d1f7445 100644 --- a/2020/day10/OUTPUT +++ b/2020/day10/OUTPUT @@ -1,18 +1,16 @@ -cc -w ex1-c.c -o ex1-c ex1.bash : diff1=71 diff2=27 res=1917 - time: 0:00.01 real, 0.00 user, 0.00 sys - context-switch: 1+4, page-faults: 0+331 + time: 0:00.01 real, 0.01 user, 0.00 sys + context-switch: 7+1, page-faults: 0+234 ex1-c : diff1=71 diff2=27 res=1917 time: 0:00.00 real, 0.00 user, 0.00 sys context-switch: 0+1, page-faults: 0+73 -cc -w ex2-c.c -o ex2-c ex2.bash : size=99 res=113387824750592 - time: 0:00.01 real, 0.01 user, 0.00 sys - context-switch: 2+4, page-faults: 0+329 + time: 0:00.02 real, 0.02 user, 0.00 sys + context-switch: 10+1, page-faults: 0+236 ex2-c : size=99 res=113387824750592 time: 0:00.00 real, 0.00 user, 0.00 sys - context-switch: 0+1, page-faults: 0+73 + context-switch: 0+1, page-faults: 0+74 diff --git a/2020/day10/ex1.bash b/2020/day10/ex1.bash index f1e139b..0382b5b 100755 --- a/2020/day10/ex1.bash +++ b/2020/day10/ex1.bash @@ -5,9 +5,31 @@ CMD=${0##*/} shopt -s extglob +# quicksort implementation (ascending) +qsort() { + local pivot i smaller=() larger=() + qsort_ret=() + (($#==0)) && return 0 + pivot=$1 + shift + for i; do + if (( i < pivot )); then + smaller+=( "$i" ) + else + larger+=( "$i" ) + fi + done + qsort "${smaller[@]}" + smaller=( "${qsort_ret[@]}" ) + qsort "${larger[@]}" + larger=( "${qsort_ret[@]}" ) + qsort_ret=( "${smaller[@]}" "$pivot" "${larger[@]}" ) +} + declare -a numbers -readarray -t numbers <<< "$(sort -n)" -numbers=(0 "${numbers[@]}") +readarray -t numbers +qsort "${numbers[@]}" +numbers=(0 ${qsort_ret[@]}) size=${#numbers[@]} ((last=${numbers[size-1]}+3)) numbers+=("$last") diff --git a/2020/day10/ex2.bash b/2020/day10/ex2.bash index 726d3bc..8f21316 100755 --- a/2020/day10/ex2.bash +++ b/2020/day10/ex2.bash @@ -5,9 +5,31 @@ CMD=${0##*/} shopt -s extglob +# quicksort implementation (descending) +qsort() { + local pivot i smaller=() larger=() + qsort_ret=() + (($#==0)) && return 0 + pivot=$1 + shift + for i; do + if (( i > pivot )); then + smaller+=( "$i" ) + else + larger+=( "$i" ) + fi + done + qsort "${smaller[@]}" + smaller=( "${qsort_ret[@]}" ) + qsort "${larger[@]}" + larger=( "${qsort_ret[@]}" ) + qsort_ret=( "${smaller[@]}" "$pivot" "${larger[@]}" ) +} + declare -a numbers -readarray -t numbers <<< "$(sort -nr)" -numbers+=(0) +readarray -t numbers +qsort "${numbers[@]}" +numbers=(${qsort_ret[@]} 0) ((last=numbers[0]+3)) numbers=("$last" "${numbers[@]}") size=${#numbers[@]}