aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.freedom.nl>2022-02-07 14:10:22 +0100
committerAbigail <abigail@abigail.freedom.nl>2022-02-07 14:10:22 +0100
commit1a21a2b719818bb32eaa46d14d91379edc7836ce (patch)
tree34f21d08c223be249c97221849cfdb178f9167cf
parent03fe3f90231fcea43fb5911dc722d9c788cac92d (diff)
downloadperlweeklychallenge-club-1a21a2b719818bb32eaa46d14d91379edc7836ce.tar.gz
perlweeklychallenge-club-1a21a2b719818bb32eaa46d14d91379edc7836ce.tar.bz2
perlweeklychallenge-club-1a21a2b719818bb32eaa46d14d91379edc7836ce.zip
Week 151: AWK solutions
-rw-r--r--challenge-151/abigail/awk/ch-1.awk42
-rw-r--r--challenge-151/abigail/awk/ch-2.awk28
2 files changed, 70 insertions, 0 deletions
diff --git a/challenge-151/abigail/awk/ch-1.awk b/challenge-151/abigail/awk/ch-1.awk
new file mode 100644
index 0000000000..314efa9a0a
--- /dev/null
+++ b/challenge-151/abigail/awk/ch-1.awk
@@ -0,0 +1,42 @@
+#!/usr/bin/awk
+
+#
+# See https://theweeklychallenge.org/blog/perl-weekly-challenge-151
+#
+
+#
+# Run as: awk -f ch-1.awk < input-file
+#
+
+{
+ #
+ # Read in tree
+ #
+ delete tree
+ D = 0
+ i = 0
+ for (k = 0; k < NF; k ++) {
+ if ($k == "|") {
+ D ++
+ i = 0
+ }
+ else {
+ tree [D, i ++] = $k == "*" ? 0 : 1
+ }
+ }
+
+ #
+ # Find first node without children
+ #
+ for (d = 0; d <= D; d ++) {
+ for (i = 0; i < 2 ^ d; i ++) {
+ if (tree [d, i] && !tree [d + 1, 2 * i] &&
+ !tree [d + 1, 2 * i + 1]) {
+ print d + 1
+ next
+ }
+ }
+ }
+}
+
+
diff --git a/challenge-151/abigail/awk/ch-2.awk b/challenge-151/abigail/awk/ch-2.awk
new file mode 100644
index 0000000000..3eb76a8e05
--- /dev/null
+++ b/challenge-151/abigail/awk/ch-2.awk
@@ -0,0 +1,28 @@
+#!/usr/bin/awk
+
+#
+# See https://theweeklychallenge.org/blog/perl-weekly-challenge-151
+#
+
+#
+# Run as: awk -f ch-2.awk < input-file
+#
+
+function best (i, max, sum, k) {
+ if (!(i in cache)) {
+ max = 0
+ for (k = i + 2; k <= NF; k ++) {
+ sum = best(k)
+ if (sum > max) {
+ max = sum
+ }
+ }
+ cache [i] = $i + max
+ }
+ return cache [i]
+}
+
+{
+ delete cache
+ print best(1)
+}