diff options
| author | Abigail <abigail@abigail.be> | 2021-06-29 00:07:16 +0200 |
|---|---|---|
| committer | Abigail <abigail@abigail.be> | 2021-06-30 20:51:32 +0200 |
| commit | 47aed72bba5278f49f73829de5a79e7d822a8710 (patch) | |
| tree | fb2385eecff960b868a6f73d82d898b6d869367a /challenge-119/abigail/awk/ch-2.awk | |
| parent | cdbc2bb40b6c79ddae6896768daecb3fd70db92f (diff) | |
| download | perlweeklychallenge-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.awk | 51 |
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) +} |
