diff options
| author | arnesom <arne@bbop.org> | 2021-10-23 15:26:01 +0200 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2021-10-23 15:26:01 +0200 |
| commit | 033abaa7ac643d8a36b3e0e81435ac3204279f49 (patch) | |
| tree | 2d9c73f08841f4a56e0d1fc557faf432132afdf8 | |
| parent | d926c207ce8f539825cee5f55f9ddfeef6af71a6 (diff) | |
| download | perlweeklychallenge-club-033abaa7ac643d8a36b3e0e81435ac3204279f49.tar.gz perlweeklychallenge-club-033abaa7ac643d8a36b3e0e81435ac3204279f49.tar.bz2 perlweeklychallenge-club-033abaa7ac643d8a36b3e0e81435ac3204279f49.zip | |
Arne Sommer
| -rw-r--r-- | challenge-135/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/perl/ch-1.pl | 24 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/perl/ch-2.pl | 27 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/perl/m3d-perl | 24 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/perl/validate-sedol-perl | 27 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/raku/ch-1.raku | 11 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/raku/ch-2.raku | 7 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/raku/m3d | 12 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/raku/m3d-args | 11 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/raku/validate-sedol | 13 | ||||
| -rwxr-xr-x | challenge-135/arne-sommer/raku/validate-sedol-onelinerish | 7 |
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 |
