aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbigail <abigail@abigail.be>2021-10-18 20:20:18 +0200
committerAbigail <abigail@abigail.be>2021-10-18 20:20:18 +0200
commitafb90dd6756afcd43a86249358fe3a41e3cf1950 (patch)
tree96337ed7c2c0c7dd752b0510bc1cffa78f65ca02
parent69f1d3147c97538c8b7e385e3973b408fcf352f3 (diff)
downloadperlweeklychallenge-club-afb90dd6756afcd43a86249358fe3a41e3cf1950.tar.gz
perlweeklychallenge-club-afb90dd6756afcd43a86249358fe3a41e3cf1950.tar.bz2
perlweeklychallenge-club-afb90dd6756afcd43a86249358fe3a41e3cf1950.zip
AWK solutions for week 135
-rw-r--r--challenge-135/abigail/README.md2
-rw-r--r--challenge-135/abigail/awk/ch-1.awk28
-rw-r--r--challenge-135/abigail/awk/ch-2.awk38
3 files changed, 68 insertions, 0 deletions
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)
+}
+