From bd0c9b70e540314ff45f7f349b554620a88e84f9 Mon Sep 17 00:00:00 2001 From: Bruno Raoult Date: Sat, 2 Jan 2021 11:29:34 +0100 Subject: [PATCH] added my 1st (slow on exercise 2) bash version. --- day15/ex1-2-slow.bash | 65 +++++++++++++++++++++++++++++++++++++++++++ day15/ex1.bash | 2 +- 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 day15/ex1-2-slow.bash diff --git a/day15/ex1-2-slow.bash b/day15/ex1-2-slow.bash new file mode 100644 index 0000000..c5220b8 --- /dev/null +++ b/day15/ex1-2-slow.bash @@ -0,0 +1,65 @@ +#!/bin/bash +# +# ex1.bash: Advent2020 game, day 15/games 1 and 2. +# ===> Too slow for exercise 2, needed to rewrite the algorithm. + +CMD=${0##*/} +#shopt -s extglob + +declare -A prev nums +declare -i cur=0 last + + +function print_binary() { + local -i num=$1 exp + local str="" format="%0${2}d" + + for ((exp=1; num>exp; exp<<=1)); do + if ((num & exp)); then + str=1"$str" + else + str=0"$str" + fi + echo " str=$str" + done + printf "$format" $str +} + +function print_array() { + local -i i + + printf "last: %d\n" "$last" + printf "nums:\n" + for i in "${!nums[@]}"; do + printf " %6d => %d\n" "$i" "${nums[$i]}" >&2 + if [[ -v prev[$i] ]]; then + printf " prev => %d\n" "${prev[$i]}" >&2 + fi + done +} + +TARGET=$1 +IFS="," +read -r line +set -- $line +while (($# > 0)); do + nums[$1]=$cur + last=$1 + ((cur++)) + shift +done + +for ((; cur != TARGET; ++cur)); do + diff=0 + if [[ -v prev[$last] ]]; then + ((diff=nums[$last]-prev[$last])) + prev[$last]=${nums[$last]} + fi + [[ -v nums[$diff] ]] && prev[$diff]=${nums[$diff]} + nums[$diff]=$cur + last=$diff +done + +printf "%s : res=%d\n" "$CMD" "$last" + +exit 0 diff --git a/day15/ex1.bash b/day15/ex1.bash index b4f3308..2839cfb 100755 --- a/day15/ex1.bash +++ b/day15/ex1.bash @@ -1,6 +1,6 @@ #!/bin/bash # -# ex1.bash: Advent2020 game, day 15/game 1. +# ex1.bash: Advent2020 game, day 15/games 1 and 2. CMD=${0##*/} #shopt -s extglob