diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-10-23 14:04:54 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-23 14:04:54 +0100 |
| commit | ebbd8537444155c386589c0e64f56bf6849dbd60 (patch) | |
| tree | 0789872e3f6dc17a0e4b7cdc16fdd7745d294a2a /challenge-135 | |
| parent | 9daa3e136025059791e059ef01274cbc6fe3faf3 (diff) | |
| parent | e4a8b633ba8bf75a76b113b037a003c15c1e1593 (diff) | |
| download | perlweeklychallenge-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.raku | 28 | ||||
| -rw-r--r-- | challenge-135/wambash/raku/ch-2.raku | 42 |
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; +} |
