aboutsummaryrefslogtreecommitdiff
path: root/challenge-059/arne-sommer/raku/bit-sum-musing2
diff options
context:
space:
mode:
authorJared Martin <jaredor+github@gmail.com>2020-05-15 12:23:44 -0500
committerGitHub <noreply@github.com>2020-05-15 12:23:44 -0500
commit16b5c61e73278b37d483e0153ee9455d7c9b3be9 (patch)
treeffa87d894d19cbe1cf09dc6cb1dfb41c2f00a0b2 /challenge-059/arne-sommer/raku/bit-sum-musing2
parent25203be9ff4441f1ecd8773cec5b7bbf67a2c3a7 (diff)
parent4bd44dfd597811f71468831c7ee80a9101e7f30a (diff)
downloadperlweeklychallenge-club-16b5c61e73278b37d483e0153ee9455d7c9b3be9.tar.gz
perlweeklychallenge-club-16b5c61e73278b37d483e0153ee9455d7c9b3be9.tar.bz2
perlweeklychallenge-club-16b5c61e73278b37d483e0153ee9455d7c9b3be9.zip
Merge pull request #13 from manwar/master
PWC 059
Diffstat (limited to 'challenge-059/arne-sommer/raku/bit-sum-musing2')
-rwxr-xr-xchallenge-059/arne-sommer/raku/bit-sum-musing256
1 files changed, 56 insertions, 0 deletions
diff --git a/challenge-059/arne-sommer/raku/bit-sum-musing2 b/challenge-059/arne-sommer/raku/bit-sum-musing2
new file mode 100755
index 0000000000..9562349691
--- /dev/null
+++ b/challenge-059/arne-sommer/raku/bit-sum-musing2
@@ -0,0 +1,56 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Int $limit where $limit > 1 = 100, :$verbose, :$type = "int");
+
+my $prev-sum = 0;
+my $prev-inc = 0;
+my $prev-inx = 0;
+
+my @result;
+
+for 2 .. $limit -> $number
+{
+ my @list;
+
+ given $type
+ {
+ when "int" { @list = (1 .. Inf)[^$number] }
+ when "even" { @list = (2, 4 ... Inf)[^$number] }
+ when "odd" { @list = (1, 3 ... Inf)[^$number] }
+ when "prime" { @list = ((1 .. Inf).grep: *.is-prime)[^$number] }
+ when "fib" { @list = (1, 1, * + * ... Inf)[^$number] }
+ default { die "Unknown type $_" }
+ }
+
+ my $sum = bit-sum(@list);
+ my $inc = $sum - $prev-sum;
+ my $inx = $inc - $prev-inc;
+
+ say ": bit-sum @list[] -> { $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;
+ }
+}