diff options
| -rwxr-xr-x | challenge-079/wambash/raku/ch-1.raku | 33 | ||||
| -rwxr-xr-x | challenge-079/wambash/raku/ch-2.raku | 14 |
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; +} |
