diff options
| author | Jaldhar H. Vyas <jaldhar@braincells.com> | 2022-05-02 02:53:21 -0400 |
|---|---|---|
| committer | Jaldhar H. Vyas <jaldhar@braincells.com> | 2022-05-02 02:53:21 -0400 |
| commit | 2a04e06f24cabd484d91bf2c6802fa248f5281f1 (patch) | |
| tree | db29fb9fb93f027de6018ec23a0710d8e2c8cc8e | |
| parent | f677098515ea60add06ee12993635f9a7b974a7b (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-162/jaldhar-h-vyas/perl/ch-1.pl | 48 | ||||
| -rwxr-xr-x | challenge-162/jaldhar-h-vyas/raku/ch-1.raku | 11 |
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 |
