aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-05-10 13:05:07 +0200
committerAbigail <abigail@abigail.be>2021-05-10 13:05:07 +0200
commitea5d349d51ce09985b5c59e346ea6da3bdc37562 (patch)
treeb34e7258280cafb2d26c88b50e3fafea1f9f3701
parent354e9f2bd924a07b9c8b5ab0ff57aadad6f147ab (diff)
downloadperlweeklychallenge-club-ea5d349d51ce09985b5c59e346ea6da3bdc37562.tar.gz
perlweeklychallenge-club-ea5d349d51ce09985b5c59e346ea6da3bdc37562.tar.bz2
perlweeklychallenge-club-ea5d349d51ce09985b5c59e346ea6da3bdc37562.zip
AWK solutions for week 112
-rw-r--r--challenge-112/abigail/README.md2
-rw-r--r--challenge-112/abigail/awk/ch-1.awk44
-rw-r--r--challenge-112/abigail/awk/ch-2.awk25
3 files changed, 71 insertions, 0 deletions
diff --git a/challenge-112/abigail/README.md b/challenge-112/abigail/README.md
index 1048c5465e..dbd9121743 100644
--- a/challenge-112/abigail/README.md
+++ b/challenge-112/abigail/README.md
@@ -33,6 +33,7 @@ Output: "/a"
~~~~
### Solutions
+* [AWK](awk/ch-1.awk)
* [Perl](perl/ch-1.pl)
### Blog
@@ -49,6 +50,7 @@ This is just finding the `$n + 1` Fibonacci number.
### Solutions
+* [AWK](awk/ch-2.awk)
* [Perl](perl/ch-2.pl)
### Blog
diff --git a/challenge-112/abigail/awk/ch-1.awk b/challenge-112/abigail/awk/ch-1.awk
new file mode 100644
index 0000000000..5de385b451
--- /dev/null
+++ b/challenge-112/abigail/awk/ch-1.awk
@@ -0,0 +1,44 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-1.awk < input-file
+#
+
+BEGIN {
+ FS="/" # So we split into directory parts
+}
+
+{
+ delete path
+ j = 0 # Tracks the number of parts in
+ # the canonical part.
+ for (i = 1; i <= NF; i ++) { # Loop over directory parts
+ if ($i == "") { # Skip empty parts
+ continue;
+ }
+ if ($i == ".") { # Skip current directory
+ continue;
+ }
+ if ($i == "..") { # Back up to parent directory
+ if (j > 0) {
+ j --
+ }
+ continue;
+ }
+ path [j] = $i # Copy
+ j ++
+ }
+ if (j == 0) { # Root directory
+ print "/"
+ }
+ else { # Print parts, preceeded by a /
+ for (k = 0; k < j; k ++) {
+ printf "/%s", path [k]
+ }
+ print ""
+ }
+}
diff --git a/challenge-112/abigail/awk/ch-2.awk b/challenge-112/abigail/awk/ch-2.awk
new file mode 100644
index 0000000000..5053d8467a
--- /dev/null
+++ b/challenge-112/abigail/awk/ch-2.awk
@@ -0,0 +1,25 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-2.awk < input-file
+#
+
+BEGIN {
+ cache [0] = 1
+ cache [1] = 1
+}
+
+function fib (n) {
+ if (!(n in cache)) {
+ cache [n] = fib(n - 1) + fib(n - 2)
+ }
+ return cache [n]
+}
+
+{
+ print fib($1)
+}