diff options
| author | Markus "Holli" Holzer <holli.holzer@gmail.com> | 2020-09-22 11:08:32 +0200 |
|---|---|---|
| committer | Markus "Holli" Holzer <holli.holzer@gmail.com> | 2020-09-22 11:08:32 +0200 |
| commit | 083ff144a1eeebd1c7783dfae1acb78f63fedf65 (patch) | |
| tree | 00223bfa2e78e7804563131a2fdd68890dec7b1b /challenge-079/markus-holzer | |
| parent | 93f93db1b10b67f24fed13405eb7c69c4f98011a (diff) | |
| download | perlweeklychallenge-club-083ff144a1eeebd1c7783dfae1acb78f63fedf65.tar.gz perlweeklychallenge-club-083ff144a1eeebd1c7783dfae1acb78f63fedf65.tar.bz2 perlweeklychallenge-club-083ff144a1eeebd1c7783dfae1acb78f63fedf65.zip | |
faster! faster!!
Diffstat (limited to 'challenge-079/markus-holzer')
| -rw-r--r-- | challenge-079/markus-holzer/raku/bench.raku | 30 | ||||
| -rw-r--r-- | challenge-079/markus-holzer/raku/ch-1.raku | 27 |
2 files changed, 29 insertions, 28 deletions
diff --git a/challenge-079/markus-holzer/raku/bench.raku b/challenge-079/markus-holzer/raku/bench.raku index b137f7e90d..c42bbb0ae6 100644 --- a/challenge-079/markus-holzer/raku/bench.raku +++ b/challenge-079/markus-holzer/raku/bench.raku @@ -55,24 +55,24 @@ sub a($n) { $total-bits; } -sub b(Int $N) +sub b(Int \N) { - my Int $t = 2; - my Int $r = 0; - my Int $n = $N; - - while $n { - my $a = $t +> 1; - my $s = $N +& ( $t - 1 ); - my $d = ( $N div $t ); - - $r += $d * $a; - $r += 1 + $s - $a if $s > $a - 1; - $t +<= 1; - $n +>= 1; + my Int \t = 2; + my Int \r = 0; + my Int \n = N; + + while n { + my Int \a = t +> 1; + my Int \s = N +& ( t - 1 ); + my Int \d = N div t; + + r := r + d * a; + r := r + 1 + s - a if 1 + s > a; + t := t +< 1; + n := n +> 1; } - return $r + return r } Bench.new.timethese( 1000, { diff --git a/challenge-079/markus-holzer/raku/ch-1.raku b/challenge-079/markus-holzer/raku/ch-1.raku index bf62b2bf06..c9215dde2f 100644 --- a/challenge-079/markus-holzer/raku/ch-1.raku +++ b/challenge-079/markus-holzer/raku/ch-1.raku @@ -1,18 +1,19 @@ -unit sub MAIN( Int $N ); +unit sub MAIN( Int \N ); -my Int $t = 2; -my Int $r = 0; -my Int $n = $N; +my Int \t = 2; +my Int \r = 0; +my Int \n = N; -while $n { - my $a = $t +> 1; - my $s = $N +& ( $t - 1 ); - my $d = ( $N div $t ); +while n { + my Int \a = t +> 1; + my Int \s = N +& ( t - 1 ); + my Int \d = N div t; - $r += $d * $a; - $r += 1 + $s - $a if $s > $a - 1; - $t +<= 1; - $n +>= 1; + r := r + d * a; + r := r + 1 + s - a if 1 + s > a; + t := t +< 1; + n := n +> 1; } -say $r % 1000000007;
\ No newline at end of file + +say r % 1000000007;
\ No newline at end of file |
