diff options
| author | Jared Martin <jaredor+github@gmail.com> | 2020-05-15 12:23:44 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-15 12:23:44 -0500 |
| commit | 16b5c61e73278b37d483e0153ee9455d7c9b3be9 (patch) | |
| tree | ffa87d894d19cbe1cf09dc6cb1dfb41c2f00a0b2 /challenge-059/arne-sommer/raku/bit-sum-musing2 | |
| parent | 25203be9ff4441f1ecd8773cec5b7bbf67a2c3a7 (diff) | |
| parent | 4bd44dfd597811f71468831c7ee80a9101e7f30a (diff) | |
| download | perlweeklychallenge-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-x | challenge-059/arne-sommer/raku/bit-sum-musing2 | 56 |
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; + } +} |
