aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2021-10-23 15:26:01 +0200
committerarnesom <arne@bbop.org>2021-10-23 15:26:01 +0200
commit033abaa7ac643d8a36b3e0e81435ac3204279f49 (patch)
tree2d9c73f08841f4a56e0d1fc557faf432132afdf8
parentd926c207ce8f539825cee5f55f9ddfeef6af71a6 (diff)
downloadperlweeklychallenge-club-033abaa7ac643d8a36b3e0e81435ac3204279f49.tar.gz
perlweeklychallenge-club-033abaa7ac643d8a36b3e0e81435ac3204279f49.tar.bz2
perlweeklychallenge-club-033abaa7ac643d8a36b3e0e81435ac3204279f49.zip
Arne Sommer
-rw-r--r--challenge-135/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-135/arne-sommer/perl/ch-1.pl24
-rwxr-xr-xchallenge-135/arne-sommer/perl/ch-2.pl27
-rwxr-xr-xchallenge-135/arne-sommer/perl/m3d-perl24
-rwxr-xr-xchallenge-135/arne-sommer/perl/validate-sedol-perl27
-rwxr-xr-xchallenge-135/arne-sommer/raku/ch-1.raku11
-rwxr-xr-xchallenge-135/arne-sommer/raku/ch-2.raku7
-rwxr-xr-xchallenge-135/arne-sommer/raku/m3d12
-rwxr-xr-xchallenge-135/arne-sommer/raku/m3d-args11
-rwxr-xr-xchallenge-135/arne-sommer/raku/validate-sedol13
-rwxr-xr-xchallenge-135/arne-sommer/raku/validate-sedol-onelinerish7
11 files changed, 164 insertions, 0 deletions
diff --git a/challenge-135/arne-sommer/blog.txt b/challenge-135/arne-sommer/blog.txt
new file mode 100644
index 0000000000..b2f2808efc
--- /dev/null
+++ b/challenge-135/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/sedol-middle.html
diff --git a/challenge-135/arne-sommer/perl/ch-1.pl b/challenge-135/arne-sommer/perl/ch-1.pl
new file mode 100755
index 0000000000..02e84db46a
--- /dev/null
+++ b/challenge-135/arne-sommer/perl/ch-1.pl
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+my $n = $ARGV[0] // "";
+
+die "integer only" unless $n =~ /^\-?[1-9]\d*$/;
+
+$n = abs($n) if $n < 0;
+
+if (length($n) % 2 == 0)
+{
+ say "even number of digits";
+}
+elsif (length($n) < 3)
+{
+ say "too short";
+}
+else
+{
+ say substr($n, (length($n) -3) / 2, 3);
+}
diff --git a/challenge-135/arne-sommer/perl/ch-2.pl b/challenge-135/arne-sommer/perl/ch-2.pl
new file mode 100755
index 0000000000..518919e7d0
--- /dev/null
+++ b/challenge-135/arne-sommer/perl/ch-2.pl
@@ -0,0 +1,27 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+my $SEDOL = $ARGV[0] // "";
+
+die "SEDOL with wrong length and/or characters"
+ unless $SEDOL =~ /^[0-9|BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$/;
+
+my @weight = (1, 3, 1, 7, 3, 9, 1);
+
+my @alphabet = (0..9, 'A'..'Z');
+
+my %alphabet = ( map { $alphabet[$_] => $_ } (0 .. @alphabet -1));
+
+my $sum;
+
+for my $index (0..5)
+{
+ $sum += $alphabet{ substr($SEDOL, $index, 1) } * $weight[$index];
+}
+
+my $check = (10 - ($sum % 10)) % 10;
+
+say 0 + (substr($SEDOL, 6) eq $check);
diff --git a/challenge-135/arne-sommer/perl/m3d-perl b/challenge-135/arne-sommer/perl/m3d-perl
new file mode 100755
index 0000000000..02e84db46a
--- /dev/null
+++ b/challenge-135/arne-sommer/perl/m3d-perl
@@ -0,0 +1,24 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+my $n = $ARGV[0] // "";
+
+die "integer only" unless $n =~ /^\-?[1-9]\d*$/;
+
+$n = abs($n) if $n < 0;
+
+if (length($n) % 2 == 0)
+{
+ say "even number of digits";
+}
+elsif (length($n) < 3)
+{
+ say "too short";
+}
+else
+{
+ say substr($n, (length($n) -3) / 2, 3);
+}
diff --git a/challenge-135/arne-sommer/perl/validate-sedol-perl b/challenge-135/arne-sommer/perl/validate-sedol-perl
new file mode 100755
index 0000000000..518919e7d0
--- /dev/null
+++ b/challenge-135/arne-sommer/perl/validate-sedol-perl
@@ -0,0 +1,27 @@
+#! /usr/bin/env perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+my $SEDOL = $ARGV[0] // "";
+
+die "SEDOL with wrong length and/or characters"
+ unless $SEDOL =~ /^[0-9|BCDFGHJKLMNPQRSTVWXYZ]{6}[0-9]$/;
+
+my @weight = (1, 3, 1, 7, 3, 9, 1);
+
+my @alphabet = (0..9, 'A'..'Z');
+
+my %alphabet = ( map { $alphabet[$_] => $_ } (0 .. @alphabet -1));
+
+my $sum;
+
+for my $index (0..5)
+{
+ $sum += $alphabet{ substr($SEDOL, $index, 1) } * $weight[$index];
+}
+
+my $check = (10 - ($sum % 10)) % 10;
+
+say 0 + (substr($SEDOL, 6) eq $check);
diff --git a/challenge-135/arne-sommer/raku/ch-1.raku b/challenge-135/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..f5c3c1ee4b
--- /dev/null
+++ b/challenge-135/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,11 @@
+#! /usr/bin/env raku
+
+my $n = @*ARGS[0];
+
+die "Not an integer" unless $n ~~ /^\-?<[1..9]><[0..9]>*$/;
+
+$n = $n.abs if $n < 0;
+
+if $n.chars %% 2 { say "even number of digits"; }
+elsif $n.chars < 3 { say "too short"; }
+else { say $n.substr(($n.chars - 3) /2, 3); }
diff --git a/challenge-135/arne-sommer/raku/ch-2.raku b/challenge-135/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..cfb7304d6a
--- /dev/null
+++ b/challenge-135/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+subset SEDOL where * ~~ /<[0..9 BCDFGHJKLMNPQRSTVWXYZ]>**6<[0..9]>/;
+
+unit sub MAIN (SEDOL $SEDOL);
+
+say + ($SEDOL.substr(6) eq (10 − (((^6).map({ $SEDOL.substr($_, 1).parse-base(35) * (1, 3, 1, 7, 3, 9, 1)[$_] }).sum) % 10)) % 10); \ No newline at end of file
diff --git a/challenge-135/arne-sommer/raku/m3d b/challenge-135/arne-sommer/raku/m3d
new file mode 100755
index 0000000000..9474362d31
--- /dev/null
+++ b/challenge-135/arne-sommer/raku/m3d
@@ -0,0 +1,12 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $n);
+
+$n = $n.abs if $n < 0;
+
+given $n
+{
+ when .chars %% 2 { say "even number of digits"; }
+ when .chars < 3 { say "too short"; }
+ default { say .substr((.chars - 3) /2, 3); }
+}
diff --git a/challenge-135/arne-sommer/raku/m3d-args b/challenge-135/arne-sommer/raku/m3d-args
new file mode 100755
index 0000000000..f5c3c1ee4b
--- /dev/null
+++ b/challenge-135/arne-sommer/raku/m3d-args
@@ -0,0 +1,11 @@
+#! /usr/bin/env raku
+
+my $n = @*ARGS[0];
+
+die "Not an integer" unless $n ~~ /^\-?<[1..9]><[0..9]>*$/;
+
+$n = $n.abs if $n < 0;
+
+if $n.chars %% 2 { say "even number of digits"; }
+elsif $n.chars < 3 { say "too short"; }
+else { say $n.substr(($n.chars - 3) /2, 3); }
diff --git a/challenge-135/arne-sommer/raku/validate-sedol b/challenge-135/arne-sommer/raku/validate-sedol
new file mode 100755
index 0000000000..960e2eb681
--- /dev/null
+++ b/challenge-135/arne-sommer/raku/validate-sedol
@@ -0,0 +1,13 @@
+#! /usr/bin/env raku
+
+subset SEDOL where * ~~ /<[0..9 BCDFGHJKLMNPQRSTVWXZ]>**6<[0..9]>/;
+
+unit sub MAIN (SEDOL $SEDOL);
+
+my @weight = (1, 3, 1, 7, 3, 9, 1);
+
+my $sum = (^6).map({ $SEDOL.substr($_, 1).parse-base(35) * @weight[$_] }).sum;
+
+my $check = (10 - ($sum % 10)) % 10;
+
+say + ($SEDOL.substr(6) eq $check);
diff --git a/challenge-135/arne-sommer/raku/validate-sedol-onelinerish b/challenge-135/arne-sommer/raku/validate-sedol-onelinerish
new file mode 100755
index 0000000000..cfb7304d6a
--- /dev/null
+++ b/challenge-135/arne-sommer/raku/validate-sedol-onelinerish
@@ -0,0 +1,7 @@
+#! /usr/bin/env raku
+
+subset SEDOL where * ~~ /<[0..9 BCDFGHJKLMNPQRSTVWXYZ]>**6<[0..9]>/;
+
+unit sub MAIN (SEDOL $SEDOL);
+
+say + ($SEDOL.substr(6) eq (10 − (((^6).map({ $SEDOL.substr($_, 1).parse-base(35) * (1, 3, 1, 7, 3, 9, 1)[$_] }).sum) % 10)) % 10); \ No newline at end of file