diff options
| author | 冯昶 <seaker@qq.com> | 2021-10-19 19:35:54 +0800 |
|---|---|---|
| committer | 冯昶 <seaker@qq.com> | 2021-10-19 19:35:54 +0800 |
| commit | 72f7e048afc69c0f2a596963e1ed6e274688a4f5 (patch) | |
| tree | 58312d159024741c83f65d963d31683de1e17c51 | |
| parent | 72cb95e02ad0a4ec6099d721a4bd215d692776ad (diff) | |
| download | perlweeklychallenge-club-72f7e048afc69c0f2a596963e1ed6e274688a4f5.tar.gz perlweeklychallenge-club-72f7e048afc69c0f2a596963e1ed6e274688a4f5.tar.bz2 perlweeklychallenge-club-72f7e048afc69c0f2a596963e1ed6e274688a4f5.zip | |
challenge 135, raku solutions
| -rwxr-xr-x | challenge-135/feng-chang/raku/ch-1.raku | 15 | ||||
| -rwxr-xr-x | challenge-135/feng-chang/raku/ch-2.raku | 19 |
2 files changed, 34 insertions, 0 deletions
diff --git a/challenge-135/feng-chang/raku/ch-1.raku b/challenge-135/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..4cc6c2919c --- /dev/null +++ b/challenge-135/feng-chang/raku/ch-1.raku @@ -0,0 +1,15 @@ +#!/bin/env raku + +=begin usage + + ./ch-1.raku -- -1234 + +=end usage + +sub MAIN(Int:D $N) { + given abs($N) { + when $_.chars %% 2 { put 'even number of digits'; exit } + when $_.chars < 3 { put 'too short'; exit } + default { put $_.substr($_.chars div 2 - 1, 3) } + } +} diff --git a/challenge-135/feng-chang/raku/ch-2.raku b/challenge-135/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..bc0c1f3da3 --- /dev/null +++ b/challenge-135/feng-chang/raku/ch-2.raku @@ -0,0 +1,19 @@ +#!/bin/env raku + +my method digit-value(Str:D $d where *.chars == 1 :) { + return $d.Int if '0' le $d le '9'; + return $d.ord - 'A'.ord if 'A' le $d le 'Z'; + die 'wrong digit: ', $d; +} + +sub check-digit(Str:D $sedol where *.chars == 6 --> UInt:D) { + state @weights = 1, 3, 1, 7, 3, 9, 1; + my @digits = $sedol.comb; + + 10 - (^6)».&{ @digits[$_].&digit-value * @weights[$_] }.sum % 10 +} + +sub MAIN(Str:D $S where *.chars == 7) { + my Str $s = uc($S); + put +so check-digit($s.substr(0, 6)) == $s.substr(6, 1).Int; +} |
