aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xchallenge-079/wambash/raku/ch-1.raku33
-rwxr-xr-xchallenge-079/wambash/raku/ch-2.raku14
2 files changed, 47 insertions, 0 deletions
diff --git a/challenge-079/wambash/raku/ch-1.raku b/challenge-079/wambash/raku/ch-1.raku
new file mode 100755
index 0000000000..669ed9e87f
--- /dev/null
+++ b/challenge-079/wambash/raku/ch-1.raku
@@ -0,0 +1,33 @@
+#!/usr/bin/env raku
+
+multi count-set-bit ($n) {
+ 1 .. $n
+ andthen .map: |*.polymod(2 xx *)
+ andthen .sum
+}
+
+multi count-set-bit ($n where * ≥ 100) {
+ count-set-bit-big( $n )
+}
+
+constant $mod=1000000007;
+sub count-set-bit-big ($n) {
+ $n
+ andthen .polymod(2 xx *)
+ andthen .grep: * == 1, :k
+ andthen .reverse
+ andthen .map: { ( ( ($_ + 2*$++) mod $mod) * 2.expmod($_-1 ,$mod) + 1 ) mod $mod }\
+ andthen .sum mod $mod
+}
+
+multi MAIN (:$test!) {
+ use Test;
+ is count-set-bit(3), 4;
+ is count-set-bit(4), 5;
+ is count-set-bit-big(3), 4;
+ is count-set-bit-big(4), 5;
+ is count-set-bit-big($_), count-set-bit($_), "$_" for ^100 .pick(10);
+ is count-set-bit(10_000), 64613;
+ is count-set-bit(3**2**12), 562270664;
+ done-testing;
+}
diff --git a/challenge-079/wambash/raku/ch-2.raku b/challenge-079/wambash/raku/ch-2.raku
new file mode 100755
index 0000000000..de6cbd6170
--- /dev/null
+++ b/challenge-079/wambash/raku/ch-2.raku
@@ -0,0 +1,14 @@
+#!/usr/bin/env raku
+
+sub trapped-rain-water ( +@n ) {
+ @n.pairs
+ andthen .map: { (@n[0.. .key].max min @n[.key..*].max) - .value }\
+ andthen .sum
+}
+
+multi MAIN (:$test!) {
+ use Test;
+ is trapped-rain-water(2, 1, 4, 1, 2, 5),6;
+ is trapped-rain-water(3, 1, 3, 1, 1, 5),6;
+ done-testing;
+}