From afb90dd6756afcd43a86249358fe3a41e3cf1950 Mon Sep 17 00:00:00 2001 From: Abigail Date: Mon, 18 Oct 2021 20:20:18 +0200 Subject: AWK solutions for week 135 --- challenge-135/abigail/README.md | 2 ++ challenge-135/abigail/awk/ch-1.awk | 28 ++++++++++++++++++++++++++++ challenge-135/abigail/awk/ch-2.awk | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 challenge-135/abigail/awk/ch-1.awk create mode 100644 challenge-135/abigail/awk/ch-2.awk diff --git a/challenge-135/abigail/README.md b/challenge-135/abigail/README.md index 6c58ec0530..e0e26b70dd 100644 --- a/challenge-135/abigail/README.md +++ b/challenge-135/abigail/README.md @@ -2,10 +2,12 @@ ## Part 1 +* [AWK](awk/ch-1.awk) * [C](c/ch-1.c) * [Perl](perl/ch-1.pl) ## Part 2 +* [AWK](awk/ch-2.awk) * [C](c/ch-2.c) * [Perl](perl/ch-2.pl) diff --git a/challenge-135/abigail/awk/ch-1.awk b/challenge-135/abigail/awk/ch-1.awk new file mode 100644 index 0000000000..210b27b9b0 --- /dev/null +++ b/challenge-135/abigail/awk/ch-1.awk @@ -0,0 +1,28 @@ +#!/usr/bin/awk + +# +# See ../README.md +# + +# +# Run as: awk -f ch-1.awk < input-file +# + + +# +# Get rid of leading sign +# +/^[-+]/ {$0 = substr ($0, 2)} + +# +# Validation +# +/[^0-9]/ {print "not an integer"; next} +/^(..)*$/ {print "even number of digits"; next} +length ($0) < 3 {print "too short"; next} + +# +# Print the middle three digits +# + + {print substr ($0, 1 + int ((length ($0) - 3) / 2), 3)} diff --git a/challenge-135/abigail/awk/ch-2.awk b/challenge-135/abigail/awk/ch-2.awk new file mode 100644 index 0000000000..021224dfe0 --- /dev/null +++ b/challenge-135/abigail/awk/ch-2.awk @@ -0,0 +1,38 @@ +#!/usr/bin/awk + +# +# See ../README.md +# + +# +# Run as: awk -f ch-2.awk < input-file +# + +BEGIN { + split ("1 3 1 7 3 9 1", w, " ") + for (i = 48; i <= 57; i ++) { + c [sprintf ("%c", i)] = i - 48 + } + for (i = 65; i <= 90; i ++) { + c [sprintf ("%c", i)] = i - 65 + } +} + + +# +# Check for the right characters, and the correct length. +# +/[^0-9BCDFGHJKLMNPQRSTVWXYZ]/ {print 0; next} +length ($0) != 7 {print 0; next} + +# +# Do the check sum +# +{ + check = 0 + for (i = 1; i <= 7; i ++) { + check += w [i] * c [substr ($0, i, 1)] + } + print (check % 10 == 0 ? 1 : 0) +} + -- cgit