From 384b5a40d9206a23f0b39465a33489e9ca9fa049 Mon Sep 17 00:00:00 2001 From: "Jaldhar H. Vyas" Date: Sun, 24 Oct 2021 20:35:51 -0400 Subject: Challenge 135 by Jaldhar H. Vyas. --- challenge-135/jaldhar-h-vyas/blog.txt | 1 + challenge-135/jaldhar-h-vyas/perl/ch-1.pl | 23 +++++++++++++++++++ challenge-135/jaldhar-h-vyas/perl/ch-2.pl | 35 +++++++++++++++++++++++++++++ challenge-135/jaldhar-h-vyas/raku/ch-1.raku | 23 +++++++++++++++++++ challenge-135/jaldhar-h-vyas/raku/ch-2.raku | 33 +++++++++++++++++++++++++++ 5 files changed, 115 insertions(+) create mode 100644 challenge-135/jaldhar-h-vyas/blog.txt create mode 100755 challenge-135/jaldhar-h-vyas/perl/ch-1.pl create mode 100755 challenge-135/jaldhar-h-vyas/perl/ch-2.pl create mode 100755 challenge-135/jaldhar-h-vyas/raku/ch-1.raku create mode 100755 challenge-135/jaldhar-h-vyas/raku/ch-2.raku diff --git a/challenge-135/jaldhar-h-vyas/blog.txt b/challenge-135/jaldhar-h-vyas/blog.txt new file mode 100644 index 0000000000..76eb86cd57 --- /dev/null +++ b/challenge-135/jaldhar-h-vyas/blog.txt @@ -0,0 +1 @@ +https://www.braincells.com/perl/2021/10/perl_weekly_challenge_week_135.html diff --git a/challenge-135/jaldhar-h-vyas/perl/ch-1.pl b/challenge-135/jaldhar-h-vyas/perl/ch-1.pl new file mode 100755 index 0000000000..bd5d1e47d3 --- /dev/null +++ b/challenge-135/jaldhar-h-vyas/perl/ch-1.pl @@ -0,0 +1,23 @@ +#!/usr/bin/perl +use 5.020; +use warnings; + +my $n = shift // die "Need an integer.\n"; + +$n =~ s/^\-//; + +if ($n !~ /^\d+$/) { + die "Not an integer.\n"; +} + +my $len = length $n; + +if ($len % 2 == 0) { + die "Even number of digits\n"; +} + +if ($len < 3) { + die "Too short.\n"; +} + +say substr $n, ($len - 3) / 2, 3; \ No newline at end of file diff --git a/challenge-135/jaldhar-h-vyas/perl/ch-2.pl b/challenge-135/jaldhar-h-vyas/perl/ch-2.pl new file mode 100755 index 0000000000..3ec8672399 --- /dev/null +++ b/challenge-135/jaldhar-h-vyas/perl/ch-2.pl @@ -0,0 +1,35 @@ +#!/usr/bin/perl +use 5.020; +use warnings; + +sub check { + my ($sedol) = @_; + + if (length $sedol != 7) { + return undef; + } + + if ($sedol !~ /^ [0-9B-DF-HJ-NP-TV-Z]{6} [0-9] $/x) { + return undef; + } + + my @weights = (1, 3, 1, 7, 3, 9, 1); + + my @chars = split //, $sedol; + + my $sum = 0; + + for my $i (0 .. 5) { + if (ord($chars[$i]) >= ord('0') && ord($chars[$i]) <= ord('9')) { + $sum += $chars[$i] * $weights[$i]; + } else { + $sum += (ord($chars[$i]) - ord('A')) * $weights[$i]; + } + } + + return ((10 - $sum % 10) % 10) == $chars[6]; +} + +my $sedol = shift // die "Need a seven character string.\n"; + +say check($sedol) ? '1' : '0'; diff --git a/challenge-135/jaldhar-h-vyas/raku/ch-1.raku b/challenge-135/jaldhar-h-vyas/raku/ch-1.raku new file mode 100755 index 0000000000..ad4f727a70 --- /dev/null +++ b/challenge-135/jaldhar-h-vyas/raku/ch-1.raku @@ -0,0 +1,23 @@ +#!/usr/bin/raku + +sub MAIN( + Int $N +) { + my $n = $N.subst(/^\-/, q{}); + + if $n !~~ /^ \d+ $/ { + die "$n Not an integer.\n"; + } + + my $len = $n.chars; + + if $len % 2 == 0 { + die "Even number of digits\n"; + } + + if $len < 3 { + die "Too short.\n"; + } + + say $n.substr(($len - 3) / 2, 3); +} diff --git a/challenge-135/jaldhar-h-vyas/raku/ch-2.raku b/challenge-135/jaldhar-h-vyas/raku/ch-2.raku new file mode 100755 index 0000000000..72e799feba --- /dev/null +++ b/challenge-135/jaldhar-h-vyas/raku/ch-2.raku @@ -0,0 +1,33 @@ +#!/usr/bin/raku + +sub check(Str $sedol) { + if ($sedol.chars != 7) { + return False; + } + + if ($sedol !~~ /^ <[0..9] + [A..Z] - [AEIOU]> ** 6 <[0..9]> $ /) { + return False; + } + + my @weights = (1, 3, 1, 7, 3, 9, 1); + + my @chars = $sedol.comb; + + my $sum = 0; + + for 0 .. 5 -> $i { + if (@chars[$i].ord >= '0'.ord && @chars[$i].ord <= '9'.ord) { + $sum += @chars[$i] * @weights[$i]; + } else { + $sum += (@chars[$i].ord - 'A'.ord) * @weights[$i]; + } + } + + return ((10 - $sum % 10) % 10) == @chars[6]; +} + +sub MAIN( + Str $sedol #= seven character string +) { + say check($sedol) ?? '1' !! '0'; +} -- cgit