aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaldhar H. Vyas <jaldhar@braincells.com>2021-10-24 20:35:51 -0400
committerJaldhar H. Vyas <jaldhar@braincells.com>2021-10-24 20:35:51 -0400
commit384b5a40d9206a23f0b39465a33489e9ca9fa049 (patch)
treef95ccc0f8a9d55bdb1791db4f4c28ca6152e3652
parent8cf3331eb90adec5bf0305578a76f331dfcafa1c (diff)
downloadperlweeklychallenge-club-384b5a40d9206a23f0b39465a33489e9ca9fa049.tar.gz
perlweeklychallenge-club-384b5a40d9206a23f0b39465a33489e9ca9fa049.tar.bz2
perlweeklychallenge-club-384b5a40d9206a23f0b39465a33489e9ca9fa049.zip
Challenge 135 by Jaldhar H. Vyas.
-rw-r--r--challenge-135/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-135/jaldhar-h-vyas/perl/ch-1.pl23
-rwxr-xr-xchallenge-135/jaldhar-h-vyas/perl/ch-2.pl35
-rwxr-xr-xchallenge-135/jaldhar-h-vyas/raku/ch-1.raku23
-rwxr-xr-xchallenge-135/jaldhar-h-vyas/raku/ch-2.raku33
5 files changed, 115 insertions, 0 deletions
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';
+}