From b7cd81ad7d65fa804a146fbedb56dbf76b8d3a95 Mon Sep 17 00:00:00 2001 From: Abigail Date: Mon, 7 Feb 2022 18:40:11 +0100 Subject: Week 151: Bash solutions --- challenge-151/abigail/bash/ch-1.sh | 41 +++++++++++++++++++++++++++++++++ challenge-151/abigail/bash/ch-2.sh | 46 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 challenge-151/abigail/bash/ch-1.sh create mode 100644 challenge-151/abigail/bash/ch-2.sh diff --git a/challenge-151/abigail/bash/ch-1.sh b/challenge-151/abigail/bash/ch-1.sh new file mode 100644 index 0000000000..eff4fc05e6 --- /dev/null +++ b/challenge-151/abigail/bash/ch-1.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-151 +# + +# +# Run as: bash ch-1.sh < input-file +# + +set -f + +declare -A tree + +while read -a tokens +do tree=() + D=0 + i=0 + for token in ${tokens[@]} + do if [ $token == "|" ] + then D=$((D + 1)) + i=0 + else key=$D,$i + if [ $token != "*" ] + then tree[$key]=1 + fi + i=$((i + 1)) + fi + done + + for ((d = 0; d <= D; d ++)) + do for ((i = 0; i < 2 ** d; i ++)) + do if [[ -v tree[$d,$i] ]] && \ + [[ ! -v tree[$((d + 1)),$((2 * $i))] ]] && \ + [[ ! -v tree[$((d + 1)),$((2 * $i + 1))] ]] + then echo $((d + 1)) + break 2 + fi + done + done +done diff --git a/challenge-151/abigail/bash/ch-2.sh b/challenge-151/abigail/bash/ch-2.sh new file mode 100644 index 0000000000..0b8f213fca --- /dev/null +++ b/challenge-151/abigail/bash/ch-2.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +# +# See https://theweeklychallenge.org/blog/perl-weekly-challenge-151 +# + +# +# Run as: bash ch-2.sh < input-file +# + +set -f + +declare -a best + +while read -a houses +do if [[ ${#houses[@]} -lt 2 ]] + then echo ${houses[0]} + continue + fi + + size=${#houses[@]} + for ((i = size - 1; i >= 0; i --)) + do ((i1 = i + 1)) + ((i2 = i + 2)) + if ((i == size - 1)) + then best[$i]=${houses[$i]} + continue + fi + + if ((i == 0)) + then best[$i]=$((${houses[$i]} + ${best[$i2]})) + continue + fi + + if ((i == size - 2)) + then val1=${houses[$i]} + val2=${best[$i1]} + else val1=$((${houses[$i]} + ${best[$i2]})) + val2=${best[$i1]} + fi + + best[$i]=$((val1 < val2 ? val2 : val1)) + done + + echo ${best[0]} +done -- cgit