aboutsummaryrefslogtreecommitdiff
path: root/challenge-135
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-10-23 14:04:54 +0100
committerGitHub <noreply@github.com>2021-10-23 14:04:54 +0100
commitebbd8537444155c386589c0e64f56bf6849dbd60 (patch)
tree0789872e3f6dc17a0e4b7cdc16fdd7745d294a2a /challenge-135
parent9daa3e136025059791e059ef01274cbc6fe3faf3 (diff)
parente4a8b633ba8bf75a76b113b037a003c15c1e1593 (diff)
downloadperlweeklychallenge-club-ebbd8537444155c386589c0e64f56bf6849dbd60.tar.gz
perlweeklychallenge-club-ebbd8537444155c386589c0e64f56bf6849dbd60.tar.bz2
perlweeklychallenge-club-ebbd8537444155c386589c0e64f56bf6849dbd60.zip
Merge pull request #5081 from wambash/challenge-week-135
solutions week 135
Diffstat (limited to 'challenge-135')
-rw-r--r--challenge-135/wambash/raku/ch-1.raku28
-rw-r--r--challenge-135/wambash/raku/ch-2.raku42
2 files changed, 70 insertions, 0 deletions
diff --git a/challenge-135/wambash/raku/ch-1.raku b/challenge-135/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..a0a02eeb9e
--- /dev/null
+++ b/challenge-135/wambash/raku/ch-1.raku
@@ -0,0 +1,28 @@
+#!/usr/bin/env raku
+
+multi middle-three-digits ($n where .abs.chars < 2) {
+ fail 'too short'
+}
+
+multi middle-three-digits ($n where .abs.chars %% 2) {
+ fail 'even number of digits'
+}
+
+multi middle-three-digits ($n) {
+ $n.abs
+ andthen .substr: .chars div 2 - 1, 3
+}
+
+multi MAIN (Int $n) {
+ say middle-three-digits $n
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is middle-three-digits("-123"), 123;
+ is middle-three-digits('1234567'), 345;
+ fails-like { middle-three-digits(-1) }, 'too short', 'fail: too short';
+ fails-like { middle-three-digits(10) }, 'even number of digits','fail: even number of digits';
+ done-testing;
+}
+
diff --git a/challenge-135/wambash/raku/ch-2.raku b/challenge-135/wambash/raku/ch-2.raku
new file mode 100644
index 0000000000..d8fe6da3c8
--- /dev/null
+++ b/challenge-135/wambash/raku/ch-2.raku
@@ -0,0 +1,42 @@
+#!/usr/bin/env raku
+
+grammar SEDOL {
+ token TOP {
+ <char> ** 6 <check-digit>
+ }
+
+ token char {
+ <+[0..9]+[A..Z]-[AEIOU]>
+ }
+
+ token check-digit {
+ <[0..9]>
+ }
+}
+
+class Validate-SEDOL {
+ method TOP ($/) {
+ |$<char>ยป.made, $<check-digit>
+ andthen $_ Z* 1, 3, 1, 7, 3, 9, 1
+ andthen .sum
+ andthen $_ %% 10
+ andthen make $_
+ }
+
+ method char ($/) {
+ make $/.Str.parse-base(35)
+ }
+}
+
+multi MAIN ($sedol) {
+ say +so SEDOL.parse( $sedol, :actions(Validate-SEDOL)).made ;
+}
+
+multi MAIN (Bool :test($)!){
+ use Test;
+ is SEDOL.parse('2936921').<check-digit>, '1';
+ is SEDOL.parse('2936921', :actions(Validate-SEDOL)).made, True;
+ is SEDOL.parse('1234567', :actions(Validate-SEDOL)).made, False;
+ is SEDOL.parse('B0YBKL9', :actions(Validate-SEDOL)).made, True;
+ done-testing;
+}