aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2022-05-02 02:53:21 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2022-05-02 02:53:21 -0400
commit2a04e06f24cabd484d91bf2c6802fa248f5281f1 (patch)
treedb29fb9fb93f027de6018ec23a0710d8e2c8cc8e
parentf677098515ea60add06ee12993635f9a7b974a7b (diff)
downloadperlweeklychallenge-club-2a04e06f24cabd484d91bf2c6802fa248f5281f1.tar.gz
perlweeklychallenge-club-2a04e06f24cabd484d91bf2c6802fa248f5281f1.tar.bz2
perlweeklychallenge-club-2a04e06f24cabd484d91bf2c6802fa248f5281f1.zip
Challenge 162 part 1 by Jaldhar H. Vyas.
-rw-r--r--challenge-162/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-162/jaldhar-h-vyas/perl/ch-1.pl48
-rwxr-xr-xchallenge-162/jaldhar-h-vyas/raku/ch-1.raku11
3 files changed, 60 insertions, 0 deletions
diff --git a/challenge-162/jaldhar-h-vyas/blog.txt b/challenge-162/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..e3b32e3527
--- /dev/null
+++ b/challenge-162/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2022/05/perl_weekly_challenge_week_162.html \ No newline at end of file
diff --git a/challenge-162/jaldhar-h-vyas/perl/ch-1.pl b/challenge-162/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..021f40e12b
--- /dev/null
+++ b/challenge-162/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,48 @@
+#!/usr/bin/perl
+use 5.030;
+use warnings;
+use English qw/ -no_match_vars /;
+
+sub sum {
+ my ($arr) = @_;
+ my $total = 0;
+
+ for my $elem (@{$arr}) {
+ $total += $elem;
+ }
+
+ return $total;
+}
+
+sub Zmultiply {
+ my ($first, $second) = @_;
+ my @result;
+
+ for my $i (0 .. scalar @{$second} - 1) {
+ push @result, $first->[$i] * $second->[$i];
+ }
+
+ return wantarray ? @result : \@result;
+}
+
+sub usage {
+ print<<"-USAGE-";
+Usage:
+ $PROGRAM_NAME <isbn>
+
+ <isbn> An ISBN in the format nnn-n-nnn-nnnnn-n
+-USAGE-
+ exit 0;
+}
+
+my $isbn = shift // usage();
+
+if ( $isbn !~ /(\d{3}) \- (\d) \- (\d{3}) \- (\d{5}) \- (\d) /msx ) {
+ usage();
+}
+
+my @digits = split //, (join q{}, @{^CAPTURE});
+my @multipliers = (1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3);
+
+my $checkdigit = 10 - sum([Zmultiply([@digits[0 .. 11]], \@multipliers)]) % 10;
+say $checkdigit, ($checkdigit == $digits[12] ? ' (valid)' : ' (invalid)');
diff --git a/challenge-162/jaldhar-h-vyas/raku/ch-1.raku b/challenge-162/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..76f5c7ca0f
--- /dev/null
+++ b/challenge-162/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,11 @@
+#!/usr/bin/raku
+
+sub MAIN (
+ Str $isbn where { /(\d ** 3) \- (\d) \- (\d ** 3) \- (\d ** 5) \- (\d) /} #= An ISBN in the format nnn-n-nnn-nnnnn-n
+) {
+ my @digits = $/.list.join(q{}).comb;
+ my @multipliers = (1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3);
+
+ my $checkdigit = 10 - ([+] (@digits[0 .. 11] Z* @multipliers)) % 10;
+ say $checkdigit, ($checkdigit == @digits[12] ?? ' (valid)' !! ' (invalid)');
+} \ No newline at end of file