aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark A <andemark@a-iot1t.uch.ad.pvt>2021-05-24 08:22:38 -0600
committerMark A <andemark@a-iot1t.uch.ad.pvt>2021-05-24 08:22:38 -0600
commitf532137a6e3f28608042a955d678007e73c994cb (patch)
treebea22ecba14800247be926237cc83ab2e9f6c90e
parent775664098754cac878e8cd9b4d77de60b4c8825f (diff)
downloadperlweeklychallenge-club-f532137a6e3f28608042a955d678007e73c994cb.tar.gz
perlweeklychallenge-club-f532137a6e3f28608042a955d678007e73c994cb.tar.bz2
perlweeklychallenge-club-f532137a6e3f28608042a955d678007e73c994cb.zip
Challenge 114 Solutions (Raku)
-rw-r--r--challenge-114/mark-anderson/raku/ch-2.raku30
1 files changed, 30 insertions, 0 deletions
diff --git a/challenge-114/mark-anderson/raku/ch-2.raku b/challenge-114/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..97cf9bea64
--- /dev/null
+++ b/challenge-114/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,30 @@
+#!/usr/bin/env raku
+
+# translation of https://www.slideshare.net/gkumar007/bits-next-higher-presentation
+# (slide 9)
+
+use Test;
+plan 9;
+
+is next-set-bits(3), 5;
+is next-set-bits(6), 9;
+is next-set-bits(11), 13;
+is next-set-bits(23), 27;
+is next-set-bits(24), 33;
+is next-set-bits(44), 49;
+is next-set-bits(46), 51;
+is next-set-bits(240), 263;
+is next-set-bits(2³²), 2³³;
+
+sub next-set-bits($N)
+{
+ my $bits = 0 ~ $N.base(2);
+
+ my $m = $bits ~~ / $<head> = <[01]>* 0 $<ones> = 1+ $<zeros> = 0* /;
+
+ my @ones = $m<ones>.comb andthen .shift;
+ my @bits = @ones andthen .append($m<zeros>.comb);
+ @bits .= rotate(@ones);
+
+ $m<head> ~ 10 ~ @bits.join andthen .parse-base(2);
+}