diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-10-25 07:20:33 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-25 07:20:33 +0100 |
| commit | 86f0da12bf72ec8c4f259741c3475cdb0256f09c (patch) | |
| tree | 2e4e3129c7166a2e36ebdd6fa85c905be8409d00 /challenge-135 | |
| parent | 045afa37a272dfb7e839d8f6e373678c31753bc1 (diff) | |
| parent | 384b5a40d9206a23f0b39465a33489e9ca9fa049 (diff) | |
| download | perlweeklychallenge-club-86f0da12bf72ec8c4f259741c3475cdb0256f09c.tar.gz perlweeklychallenge-club-86f0da12bf72ec8c4f259741c3475cdb0256f09c.tar.bz2 perlweeklychallenge-club-86f0da12bf72ec8c4f259741c3475cdb0256f09c.zip | |
Merge pull request #5094 from jaldhar/challenge-135
Challenge 135 by Jaldhar H. Vyas.
Diffstat (limited to 'challenge-135')
| -rw-r--r-- | challenge-135/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-135/jaldhar-h-vyas/perl/ch-1.pl | 23 | ||||
| -rwxr-xr-x | challenge-135/jaldhar-h-vyas/perl/ch-2.pl | 35 | ||||
| -rwxr-xr-x | challenge-135/jaldhar-h-vyas/raku/ch-1.raku | 23 | ||||
| -rwxr-xr-x | challenge-135/jaldhar-h-vyas/raku/ch-2.raku | 33 |
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'; +} |
