From a69ebee867247a05f53192ea01af5f08f2259b15 Mon Sep 17 00:00:00 2001 From: Abigail Date: Wed, 20 Oct 2021 20:58:09 +0200 Subject: Go solutions for week 135 --- challenge-135/abigail/README.md | 2 ++ challenge-135/abigail/go/ch-1.go | 67 ++++++++++++++++++++++++++++++++++++++++ challenge-135/abigail/go/ch-2.go | 62 +++++++++++++++++++++++++++++++++++++ 3 files changed, 131 insertions(+) create mode 100644 challenge-135/abigail/go/ch-1.go create mode 100644 challenge-135/abigail/go/ch-2.go diff --git a/challenge-135/abigail/README.md b/challenge-135/abigail/README.md index b0164d2fd2..14b229d5a9 100644 --- a/challenge-135/abigail/README.md +++ b/challenge-135/abigail/README.md @@ -5,6 +5,7 @@ * [AWK](awk/ch-1.awk) * [Bash](bash/ch-1.sh) * [C](c/ch-1.c) +* [Go](go/ch-1.go) * [Lua](lua/ch-1.lua) * [Node.js](node/ch-1.js) * [Perl](perl/ch-1.pl) @@ -17,6 +18,7 @@ * [AWK](awk/ch-2.awk) * [Bash](bash/ch-2.sh) * [C](c/ch-2.c) +* [Go](go/ch-2.go) * [Lua](lua/ch-2.lua) * [Node.js](node/ch-2.js) * [Perl](perl/ch-2.pl) diff --git a/challenge-135/abigail/go/ch-1.go b/challenge-135/abigail/go/ch-1.go new file mode 100644 index 0000000000..7a8c7350b5 --- /dev/null +++ b/challenge-135/abigail/go/ch-1.go @@ -0,0 +1,67 @@ +package main + +// +// See ../README.md +// + +// +// Run as: go run ch-1.go +// + +import ( + "fmt" + "bufio" + "os" + "strings" +) + +func main () { + var reader = bufio . NewReader (os. Stdin) + main_loop: + for { + var text, err = reader . ReadString ('\n') + if (err != nil) { + break + } + // + // Get rid of newline + // + text = strings . TrimRight (text, "\n") + + // + // Remove leading sign, if any + // + if (text [0:1] == "-" || text [0:1] == "+") { + text = text [1:] + } + + // + // Check if each character is a number + // + for _, rune := range text { + if rune < '0' || rune > '9' { + fmt . Print ("not an integer\n") + continue main_loop + } + } + + // + // Check for even length + // + if len (text) % 2 == 0 { + fmt . Print ("even number of digits\n") + continue main_loop + } + + // + // Long enough? + // + if len (text) < 3 { + fmt . Print ("too short\n") + continue main_loop + } + + fmt . Printf ("%s\n", text [(len (text) - 3) / 2 : + (len (text) + 3) / 2]) + } +} diff --git a/challenge-135/abigail/go/ch-2.go b/challenge-135/abigail/go/ch-2.go new file mode 100644 index 0000000000..bb8e636c00 --- /dev/null +++ b/challenge-135/abigail/go/ch-2.go @@ -0,0 +1,62 @@ +package main + +// +// See ../README.md +// + +// +// Run as: go run ch-2.go +// + +import ( + "fmt" + "bufio" + "os" + "strings" + "regexp" +) + +func main () { + var reader = bufio . NewReader (os. Stdin) + var w = [] rune {1, 3, 1, 7, 3, 9, 1} + for { + var text, err = reader . ReadString ('\n') + if (err != nil) { + break + } + + // + // Remove trailing newline + // + text = strings . TrimRight (text, "\n") + + // + // Syntax check + // + match, _ := regexp . MatchString ( + "^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$", text) + + if !match { + fmt . Print ("0\n") + continue + } + + // + // Check sum + // + var check rune = 0 + for i, rune := range text { + if rune <= '9' { + rune -= '0' + } else { + rune -= 'A' + } + check += w [i] * rune + } + if check % 10 == 0 { + fmt . Print ("1\n") + } else { + fmt . Print ("0\n") + } + } +} -- cgit From a761e5f5c11dee3dc7f95a9bd1b3b47b1b60a23a Mon Sep 17 00:00:00 2001 From: Abigail Date: Thu, 21 Oct 2021 15:18:52 +0200 Subject: Java solutions for week 135 --- challenge-135/abigail/README.md | 2 ++ challenge-135/abigail/java/ch-1.java | 44 +++++++++++++++++++++++++++++++++++ challenge-135/abigail/java/ch-2.java | 45 ++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 challenge-135/abigail/java/ch-1.java create mode 100644 challenge-135/abigail/java/ch-2.java diff --git a/challenge-135/abigail/README.md b/challenge-135/abigail/README.md index 14b229d5a9..e10d8fbeda 100644 --- a/challenge-135/abigail/README.md +++ b/challenge-135/abigail/README.md @@ -6,6 +6,7 @@ * [Bash](bash/ch-1.sh) * [C](c/ch-1.c) * [Go](go/ch-1.go) +* [Java](java/ch-1.java) * [Lua](lua/ch-1.lua) * [Node.js](node/ch-1.js) * [Perl](perl/ch-1.pl) @@ -19,6 +20,7 @@ * [Bash](bash/ch-2.sh) * [C](c/ch-2.c) * [Go](go/ch-2.go) +* [Java](java/ch-2.java) * [Lua](lua/ch-2.lua) * [Node.js](node/ch-2.js) * [Perl](perl/ch-2.pl) diff --git a/challenge-135/abigail/java/ch-1.java b/challenge-135/abigail/java/ch-1.java new file mode 100644 index 0000000000..c22cbf3132 --- /dev/null +++ b/challenge-135/abigail/java/ch-1.java @@ -0,0 +1,44 @@ +// +// See ../README.md +// + +// +// Run as: ln ch-1.java ch1.java; javac ch1.java; java ch1 < input-file +// + +import java.util.*; +import java.util.regex.Pattern; + +public class ch1 { + public static void main (String [] args) { + Scanner scanner = new Scanner (System . in); + try { + while (true) { + String line = scanner . nextLine (); + if (!Pattern . matches ("^[-+]?[0-9]+$", line)) { + System . out . println ("not an integer"); + continue; + } + if (Pattern . matches ("^[-+].*", line)) { + line = line . substring (1); + } + int ll = line . length (); + if (ll % 2 == 0) { + System . out . println ("even number of digits"); + continue; + } + if (ll < 3) { + System . out . println ("too short"); + continue; + } + System . out . println (line . substring ((ll - 3) / 2, + (ll + 3) / 2)); + } + } + catch (Exception e) { + // + // EOF + // + } + } +} diff --git a/challenge-135/abigail/java/ch-2.java b/challenge-135/abigail/java/ch-2.java new file mode 100644 index 0000000000..477e59f8d3 --- /dev/null +++ b/challenge-135/abigail/java/ch-2.java @@ -0,0 +1,45 @@ +// +// See ../README.md +// + +// +// Run as: ln ch-2.java ch2.java; javac ch2.java; java ch2 < input-file +// + +import java.util.*; +import java.util.regex.Pattern; + +public class ch2 { + public static void main (String [] args) { + Scanner scanner = new Scanner (System . in); + String valid = "[0-9BCDFGHJKLMNPQRSTVWXYZ]"; + String pattern = "^" + valid + valid + valid + + valid + valid + valid + "[0-9]" + "$"; + int [] w = {1, 3, 1, 7, 3, 9, 1}; + try { + while (true) { + String sedol = scanner . nextLine (); + // + // Check for the correct syntax + // + if (!Pattern . matches (pattern, sedol)) { + System . out . println (0); + continue; + } + char [] chars = sedol . toCharArray (); + int check = 0; + for (int i = 0; i < 7; i ++) { + int val = (int) chars [i]; + val -= val <= (int) '9' ? (int) '0' : (int) 'A'; + check += w [i] * val; + } + System . out . println (check % 10 == 0 ? 1 : 0); + } + } + catch (Exception e) { + // + // EOF + // + } + } +} -- cgit From f99e71c8bc4fa2a05cacbd35b1871cff3f81fe72 Mon Sep 17 00:00:00 2001 From: Abigail Date: Fri, 22 Oct 2021 15:49:40 +0200 Subject: Scheme solutions for week 135 --- challenge-135/abigail/README.md | 2 ++ challenge-135/abigail/scheme/ch-1.scm | 41 +++++++++++++++++++++ challenge-135/abigail/scheme/ch-2.scm | 67 +++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 challenge-135/abigail/scheme/ch-1.scm create mode 100644 challenge-135/abigail/scheme/ch-2.scm diff --git a/challenge-135/abigail/README.md b/challenge-135/abigail/README.md index e10d8fbeda..6178e463fe 100644 --- a/challenge-135/abigail/README.md +++ b/challenge-135/abigail/README.md @@ -12,6 +12,7 @@ * [Perl](perl/ch-1.pl) * [Python](python/ch-1.py) * [Ruby](ruby/ch-1.rb) +* [Scheme](scheme/ch-1.scm) * [Tcl](tcl/ch-1.tcl) ## Part 2 @@ -26,4 +27,5 @@ * [Perl](perl/ch-2.pl) * [Python](python/ch-2.py) * [Ruby](ruby/ch-2.rb) +* [Scheme](scheme/ch-2.scm) * [Tcl](tcl/ch-2.tcl) diff --git a/challenge-135/abigail/scheme/ch-1.scm b/challenge-135/abigail/scheme/ch-1.scm new file mode 100644 index 0000000000..1b391cd159 --- /dev/null +++ b/challenge-135/abigail/scheme/ch-1.scm @@ -0,0 +1,41 @@ +;;; +;;; See ../README.md +;;; + +;;; +;;; Run as: guile --no-auto-compile ch-1.scm < input-file +;;; + +(use-modules (ice-9 regex)) +(use-modules (ice-9 rdelim)) + +(define (main) + (define line (read-line)) + (define is-number) + (define number) + (define ll) + (if (not (eof-object? line)) + (begin + (set! is-number (string-match "^[-+]?([0-9]+)$" line)) + (if (not is-number) + (display "not an integer") + (begin + (set! number (match:substring is-number 1)) + (set! ll (string-length number)) + (if (= (modulo ll 2) 0) + (display "even number of digits") + (if (< ll 3) + (display "too short") + (display (substring number (/ (- ll 3) 2) + (/ (+ ll 3) 2))) + ) + ) + ) + ) + (newline) + (main) + ) + ) +) + +(main) diff --git a/challenge-135/abigail/scheme/ch-2.scm b/challenge-135/abigail/scheme/ch-2.scm new file mode 100644 index 0000000000..f5c29b5dac --- /dev/null +++ b/challenge-135/abigail/scheme/ch-2.scm @@ -0,0 +1,67 @@ +;;; +;;; See ../README.md +;;; + +;;; +;;; Run as: guile --no-auto-compile ch-2.scm < input-file +;;; + +(use-modules (ice-9 regex)) +(use-modules (ice-9 rdelim)) +(use-modules (ice-9 iconv)) +(use-modules (rnrs bytevectors)) +(use-modules (srfi srfi-1)) + +(define pat "^[0-9BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$") +(define w (list 1 3 1 7 3 9 1)) + + +;; +;; Create a procedure 'byte->val'. It takes the ASCII value of a +;; character, and returns the corresponding number for the SEDOL +;; checksum (-10 for "A" .. "Z"). +;; +(define ords (bytevector->u8-list (string->bytevector "09A" "UTF-8"))) +(define ord-0 (list-ref ords 0)) +(define ord-9 (list-ref ords 1)) +(define ord-A (list-ref ords 2)) +(define (byte->val b) + (if (<= b ord-9) + (- b ord-0) + (- b ord-A))) + + +(define (main) + (define sedol (read-line)) + (define is-sedol) + (define valid 0) + (define check 0) + (define values) + (if (not (eof-object? sedol)) + (begin + (set! valid 0) + (set! check 0) + (set! is-sedol (string-match pat sedol)) + (if (regexp-match? is-sedol) + (begin + (set! values + (map-in-order byte->val + (bytevector->u8-list + (string->bytevector + (match:substring is-sedol 0) "UTF-8")))) + (set! check + (fold (lambda (weight val sum) (+ sum (* weight val))) + 0 w values)) + ;; + ;; A SEDOL is valid iff the checksum is a multiple of 10 + ;; + (if (= 0 (modulo check 10)) (set! valid 1)) + ) + ) + (display valid)(newline) + (main) + ) + ) +) + +(main) -- cgit From bfb91cde0d35322efb97ab84b223b4db6636c336 Mon Sep 17 00:00:00 2001 From: Abigail Date: Fri, 22 Oct 2021 17:33:22 +0200 Subject: No need for int() --- challenge-135/abigail/awk/ch-1.awk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-135/abigail/awk/ch-1.awk b/challenge-135/abigail/awk/ch-1.awk index 210b27b9b0..e446ce9669 100644 --- a/challenge-135/abigail/awk/ch-1.awk +++ b/challenge-135/abigail/awk/ch-1.awk @@ -25,4 +25,4 @@ length ($0) < 3 {print "too short"; next} # Print the middle three digits # - {print substr ($0, 1 + int ((length ($0) - 3) / 2), 3)} + {print substr ($0, 1 + (length ($0) - 3) / 2, 3)} -- cgit From 3e4d6f828dbd3ee962d42d634b93d6790e18c686 Mon Sep 17 00:00:00 2001 From: Abigail Date: Fri, 22 Oct 2021 18:35:43 +0200 Subject: Whitespace --- challenge-135/abigail/bash/ch-1.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/challenge-135/abigail/bash/ch-1.sh b/challenge-135/abigail/bash/ch-1.sh index d85a744a0c..31d8586a14 100644 --- a/challenge-135/abigail/bash/ch-1.sh +++ b/challenge-135/abigail/bash/ch-1.sh @@ -13,15 +13,11 @@ set -f while read line do line=${line/#[-+]/} # Get rid of sign if [[ $line =~ [^0-9] ]] - then - echo "not an integer" + then echo "not an integer" elif ((${#line} % 2 == 0)) - then - echo "even number of digits" + then echo "even number of digits" elif ((${#line} < 3)) - then - echo "too short" - else - echo ${line:$(((${#line} - 3) / 2)):3} + then echo "too short" + else echo ${line:$(((${#line} - 3) / 2)):3} fi done -- cgit From 635033a4af3f3d2d24171d71e607d62e00b90155 Mon Sep 17 00:00:00 2001 From: Abigail Date: Sat, 23 Oct 2021 01:02:40 +0200 Subject: Whitespace --- challenge-135/abigail/lua/ch-1.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-135/abigail/lua/ch-1.lua b/challenge-135/abigail/lua/ch-1.lua index b5db984457..d986622640 100644 --- a/challenge-135/abigail/lua/ch-1.lua +++ b/challenge-135/abigail/lua/ch-1.lua @@ -20,7 +20,7 @@ for line in io . lines () do print ("too short") else local start = 1 + (line : len () - 3) / 2 - print (line : sub (start , start + 2)) + print (line : sub (start, start + 2)) end end end -- cgit From 137d500f76dc09e2d3f1f34142b93640d760159e Mon Sep 17 00:00:00 2001 From: Abigail Date: Sat, 23 Oct 2021 21:18:05 +0200 Subject: Improve Perl solution for week 135/part 1. --- challenge-135/abigail/perl/ch-1.pl | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/challenge-135/abigail/perl/ch-1.pl b/challenge-135/abigail/perl/ch-1.pl index a74d8655a5..878d686567 100644 --- a/challenge-135/abigail/perl/ch-1.pl +++ b/challenge-135/abigail/perl/ch-1.pl @@ -18,11 +18,12 @@ use experimental 'lexical_subs'; # while (<>) { - s/^[-+]\s*//g; # We don't care about signs. - say /^([0-9]*)([0-9]{3})([0-9]*)$ + say /^[-+]?([0-9]*)([0-9]{3})([0-9]*)$ (??{length ($1) == length ($3) ? "" : "(*FAIL)"})/x - ? $2 - : length () % 2 ? "even number of digits" - : length () < 4 ? "too short" - : "not an integer"; + ? $2 + : /^[-+]?[0-9]*[^0-9].*\n/ ? "not an integer" + : /^[-+]?(?:[0-9][0-9])*\n/ ? "even number of digits" + : "too short" } + +__END__ -- cgit From cc99394104e056b4951bb563ddac2119cc00a64c Mon Sep 17 00:00:00 2001 From: Abigail Date: Sun, 24 Oct 2021 13:05:44 +0200 Subject: Initialize a variable before it is used --- challenge-135/abigail/c/ch-2.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-135/abigail/c/ch-2.c b/challenge-135/abigail/c/ch-2.c index 09b0b9fde9..ed33f0283f 100644 --- a/challenge-135/abigail/c/ch-2.c +++ b/challenge-135/abigail/c/ch-2.c @@ -23,7 +23,7 @@ int main (void) { if (str_len == 8) { int check = 0; for (size_t i = 0; i < 7 && valid; i ++) { - char first; + char first = 0; if ('0' <= line_ptr [i] && line_ptr [i] <= '9') { first = '0'; } -- cgit From 9d0c7a33b83dd4d9120862fc5932c02525d3f2c5 Mon Sep 17 00:00:00 2001 From: Abigail Date: Sun, 24 Oct 2021 19:50:25 +0200 Subject: Links to blog posts for week 135 --- challenge-135/abigail/blog.txt | 1 + challenge-135/abigail/blog1.txt | 1 + 2 files changed, 2 insertions(+) create mode 100644 challenge-135/abigail/blog.txt create mode 100644 challenge-135/abigail/blog1.txt diff --git a/challenge-135/abigail/blog.txt b/challenge-135/abigail/blog.txt new file mode 100644 index 0000000000..1e0b3ac6ed --- /dev/null +++ b/challenge-135/abigail/blog.txt @@ -0,0 +1 @@ +https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-135-1.html diff --git a/challenge-135/abigail/blog1.txt b/challenge-135/abigail/blog1.txt new file mode 100644 index 0000000000..e2e0291ee3 --- /dev/null +++ b/challenge-135/abigail/blog1.txt @@ -0,0 +1 @@ +https://abigail.github.io/HTML/Perl-Weekly-Challenge/week-135-2.html -- cgit