aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author冯昶 <seaker@qq.com>2021-10-19 19:35:54 +0800
committer冯昶 <seaker@qq.com>2021-10-19 19:35:54 +0800
commit72f7e048afc69c0f2a596963e1ed6e274688a4f5 (patch)
tree58312d159024741c83f65d963d31683de1e17c51
parent72cb95e02ad0a4ec6099d721a4bd215d692776ad (diff)
downloadperlweeklychallenge-club-72f7e048afc69c0f2a596963e1ed6e274688a4f5.tar.gz
perlweeklychallenge-club-72f7e048afc69c0f2a596963e1ed6e274688a4f5.tar.bz2
perlweeklychallenge-club-72f7e048afc69c0f2a596963e1ed6e274688a4f5.zip
challenge 135, raku solutions
-rwxr-xr-xchallenge-135/feng-chang/raku/ch-1.raku15
-rwxr-xr-xchallenge-135/feng-chang/raku/ch-2.raku19
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;
+}