diff options
| author | Jan Krňávek <Jan.Krnavek@gmail.com> | 2020-09-27 10:36:37 +0200 |
|---|---|---|
| committer | Jan Krňávek <Jan.Krnavek@gmail.com> | 2020-09-27 10:36:37 +0200 |
| commit | dbefb6ec30a3d5739ac624a5e2489bd0fbbb905d (patch) | |
| tree | ea48186b987d59be3c6fba6f274c102896c18267 | |
| parent | d71bc112962a5da8423cf4cfc1a69f8ce3f8b1a2 (diff) | |
| download | perlweeklychallenge-club-dbefb6ec30a3d5739ac624a5e2489bd0fbbb905d.tar.gz perlweeklychallenge-club-dbefb6ec30a3d5739ac624a5e2489bd0fbbb905d.tar.bz2 perlweeklychallenge-club-dbefb6ec30a3d5739ac624a5e2489bd0fbbb905d.zip | |
solutions week 079
| -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; +} |
