diff options
Diffstat (limited to 'challenge-059/arne-sommer/raku/bit-sum-musing')
| -rwxr-xr-x | challenge-059/arne-sommer/raku/bit-sum-musing | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/challenge-059/arne-sommer/raku/bit-sum-musing b/challenge-059/arne-sommer/raku/bit-sum-musing new file mode 100755 index 0000000000..e4d1166e93 --- /dev/null +++ b/challenge-059/arne-sommer/raku/bit-sum-musing @@ -0,0 +1,46 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $limit where $limit > 1 = 100, :$verbose); + +my $prev-sum = 0; +my $prev-inc = 0; +my $prev-inx = 0; + +my @result; + +for 2 .. $limit -> $number +{ + my @list = 1 .. $number; + + my $sum = bit-sum(@list); + my $inc = $sum - $prev-sum; + my $inx = $inc - $prev-inc; + + say ": bit-sum 1..{ $number.fmt("%3d") } -> { $sum.fmt("%3d") } -> { $inc.fmt("%3d") } -> { $inx.fmt("%3d") }" if $verbose; + + @result.push: $inx; + + $prev-sum = $sum; + $prev-inc = $inc; + $prev-inx = $inx; +} + +put @result; + +sub bit-sum (*@numbers where @numbers.elems > 1 && all(@numbers) ~~ Int) +{ + my $grand-total; + + for @numbers.combinations(2) -> $list + { + my $sum = bit-diff(|$list); + $grand-total += $sum; + } + + return $grand-total; + + sub bit-diff (Int $a, Int $b) + { + return ($a +^ $b).base(2).comb.sum; + } +} |
