aboutsummaryrefslogtreecommitdiff
path: root/challenge-059/arne-sommer/raku/bit-sum-musing
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-059/arne-sommer/raku/bit-sum-musing')
-rwxr-xr-xchallenge-059/arne-sommer/raku/bit-sum-musing46
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;
+ }
+}