diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-05-24 15:37:42 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-24 15:37:42 +0100 |
| commit | 3088342e8c674472388099711d212df553777dbc (patch) | |
| tree | 66f401ca3fa1eb5e48ce210e515732ca15de427f | |
| parent | 0664729d0a604822d0247e8d3c4270f3ac29f856 (diff) | |
| parent | f532137a6e3f28608042a955d678007e73c994cb (diff) | |
| download | perlweeklychallenge-club-3088342e8c674472388099711d212df553777dbc.tar.gz perlweeklychallenge-club-3088342e8c674472388099711d212df553777dbc.tar.bz2 perlweeklychallenge-club-3088342e8c674472388099711d212df553777dbc.zip | |
Merge pull request #4136 from andemark/branch-for-challenge-114
Branch for challenge 114
| -rw-r--r-- | challenge-114/mark-anderson/raku/ch-2.raku | 30 |
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); +} |
