diff options
| author | Andrew Shitov <andy@shitov.ru> | 2020-09-21 23:01:17 +0200 |
|---|---|---|
| committer | Andrew Shitov <andy@shitov.ru> | 2020-09-21 23:01:17 +0200 |
| commit | 70fd19ce09e8a169cb21f2d53c4d52b61372f85e (patch) | |
| tree | 42b86fd6b37ec20d82d995009a2285953123dd13 | |
| parent | 5ac16ac7e9826137e0da5597e954f4992c66205d (diff) | |
| download | perlweeklychallenge-club-70fd19ce09e8a169cb21f2d53c4d52b61372f85e.tar.gz perlweeklychallenge-club-70fd19ce09e8a169cb21f2d53c4d52b61372f85e.tar.bz2 perlweeklychallenge-club-70fd19ce09e8a169cb21f2d53c4d52b61372f85e.zip | |
ash 079-1
| -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); |
