aboutsummaryrefslogtreecommitdiff
path: root/challenge-151/abigail
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.freedom.nl>2022-02-07 18:40:11 +0100
committerAbigail <abigail@abigail.freedom.nl>2022-02-07 18:40:11 +0100
commitb7cd81ad7d65fa804a146fbedb56dbf76b8d3a95 (patch)
treefb5ef461fbe4f2f7d0852ff50189f137bd224e7d /challenge-151/abigail
parent98a74265eb245f20dcc038edfca401e67d6cfd4b (diff)
downloadperlweeklychallenge-club-b7cd81ad7d65fa804a146fbedb56dbf76b8d3a95.tar.gz
perlweeklychallenge-club-b7cd81ad7d65fa804a146fbedb56dbf76b8d3a95.tar.bz2
perlweeklychallenge-club-b7cd81ad7d65fa804a146fbedb56dbf76b8d3a95.zip
Week 151: Bash solutions
Diffstat (limited to 'challenge-151/abigail')
-rw-r--r--challenge-151/abigail/bash/ch-1.sh41
-rw-r--r--challenge-151/abigail/bash/ch-2.sh46
2 files changed, 87 insertions, 0 deletions
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