diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2020-09-21 22:35:55 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-09-21 22:35:55 +0100 |
| commit | 07f19360e2c6acfad1485c32d377d3328e7f99e0 (patch) | |
| tree | c4b40f3a9c6c953b984b8288a7fe51e945f78fcc /challenge-079 | |
| parent | 7acd4cd2586c67c5d1023ef667bf21977cdbe69b (diff) | |
| parent | 70fd19ce09e8a169cb21f2d53c4d52b61372f85e (diff) | |
| download | perlweeklychallenge-club-07f19360e2c6acfad1485c32d377d3328e7f99e0.tar.gz perlweeklychallenge-club-07f19360e2c6acfad1485c32d377d3328e7f99e0.tar.bz2 perlweeklychallenge-club-07f19360e2c6acfad1485c32d377d3328e7f99e0.zip | |
Merge pull request #2341 from ash/master
ash 079-1
Diffstat (limited to 'challenge-079')
| -rw-r--r-- | challenge-079/ash/raku/ch-1.raku | 45 | ||||
| -rw-r--r-- | challenge-079/ash/raku/ch-1a.raku | 20 |
2 files changed, 65 insertions, 0 deletions
diff --git a/challenge-079/ash/raku/ch-1.raku b/challenge-079/ash/raku/ch-1.raku new file mode 100644 index 0000000000..1e08b79b29 --- /dev/null +++ b/challenge-079/ash/raku/ch-1.raku @@ -0,0 +1,45 @@ +#!/usr/bin/env raku +# +# Task 1 from +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-079/# +# +# Comments: +# +# This program implements a fast algorithm. +# +# Output: +# +# $ raku ch-1.raku 42 +# 108 +# +# $ raku ch-1.raku 123456789 +# 1644989771 + +unit sub MAIN($n = 42, :v(:$verbose)); + +my @scale = (1, 2 * * ...^ * > $n); + +my $total-bits = 0; +for @scale -> $pwr { + + my $fill = ($n + 1) / (2 * $pwr); + my $max = $pwr * 2; + say "\n$pwr: fill=$fill, max=$max" if $verbose; + + my $fill-full = $fill.Int; + my $fill-frac = $fill - $fill-full; + + my $bits-full = $fill-full * $pwr; + my $bits-frac = 0; + + if $fill-frac > 0.5 { + $bits-frac = ($fill-frac - 0.5) * $max; + say "($fill-frac - 0.5) * $pwr" if $verbose; + } + + my $bits = $bits-full + $bits-frac; + say "bits-full=$bits-full, bits-frac=$bits-frac, bits=$bits" if $verbose; + + $total-bits += $bits; +} +say $total-bits; diff --git a/challenge-079/ash/raku/ch-1a.raku b/challenge-079/ash/raku/ch-1a.raku new file mode 100644 index 0000000000..c23fb1eea9 --- /dev/null +++ b/challenge-079/ash/raku/ch-1a.raku @@ -0,0 +1,20 @@ +#!/usr/bin/env raku +# +# Task 1 from +# https://perlweeklychallenge.org/blog/perl-weekly-challenge-079/ +# +# Comments: +# +# This is atraightforwad but slow (for big input numbers) solution. +# +# Output: +# +# $ raku ch-1a.raku 42 +# 108 +# +# $ raku ch-1a.raku 500 +# 2222 + +my $n = @*ARGS[0] // 42; + +say [+] ((.base(2) ~~ m:g/1/).elems for 1..$n); |
