aboutsummaryrefslogtreecommitdiff
path: root/challenge-119/abigail/awk/ch-2.awk
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-06-29 00:07:16 +0200
committerAbigail <abigail@abigail.be>2021-06-30 20:51:32 +0200
commit47aed72bba5278f49f73829de5a79e7d822a8710 (patch)
treefb2385eecff960b868a6f73d82d898b6d869367a /challenge-119/abigail/awk/ch-2.awk
parentcdbc2bb40b6c79ddae6896768daecb3fd70db92f (diff)
downloadperlweeklychallenge-club-47aed72bba5278f49f73829de5a79e7d822a8710.tar.gz
perlweeklychallenge-club-47aed72bba5278f49f73829de5a79e7d822a8710.tar.bz2
perlweeklychallenge-club-47aed72bba5278f49f73829de5a79e7d822a8710.zip
AWK, C, Lua, Node.js and Perl solutions for week 119, part 2.
Diffstat (limited to 'challenge-119/abigail/awk/ch-2.awk')
-rw-r--r--challenge-119/abigail/awk/ch-2.awk51
1 files changed, 51 insertions, 0 deletions
diff --git a/challenge-119/abigail/awk/ch-2.awk b/challenge-119/abigail/awk/ch-2.awk
new file mode 100644
index 0000000000..351c34a6b7
--- /dev/null
+++ b/challenge-119/abigail/awk/ch-2.awk
@@ -0,0 +1,51 @@
+#!/usr/bin/awk
+
+#
+# See ../README.md
+#
+
+#
+# Run as: awk -f ch-2.awk < input-file
+#
+
+function next_num (prev_num, tail) {
+ #
+ # Find the trailing 3s
+ #
+ match (prev_num, /3*$/)
+ tail = substr (prev_num, RSTART)
+
+ #
+ # Replace them with 3s
+ #
+ gsub (/3/, 1, tail)
+
+ #
+ # Put the tail back in, incrementing the number before it.
+ # If we matched the full number, add a 1
+ #
+ if (RLENGTH == length (prev_num)) {
+ prev_num = 1 tail
+ }
+ else {
+ prev_num = substr (prev_num, 1, RSTART - 2) \
+ (substr (prev_num, RSTART - 1, 1) + 1) \
+ tail
+ }
+
+ #
+ # Replace the trailing 1s with 1212...
+ #
+ gsub (/11/, "12", prev_num)
+
+ return prev_num
+}
+
+
+{
+ n = 0
+ for (i = 0; i < $1; i ++) {
+ n = next_num(n)
+ }
+ print (n)
+}