diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-11-21 10:44:07 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-21 10:44:07 +0000 |
| commit | 183a28ffae02f5d1dcc92435a9f340f3f4964db1 (patch) | |
| tree | 8348f20ab4753c84534c7f9ff6c2a99ddd303557 /challenge-244 | |
| parent | b3617506fad4da77d465d7a525e592a2445f9adb (diff) | |
| parent | 6d6ad78bb6758a941bf8bacaca01b6e2135b7cd9 (diff) | |
| download | perlweeklychallenge-club-183a28ffae02f5d1dcc92435a9f340f3f4964db1.tar.gz perlweeklychallenge-club-183a28ffae02f5d1dcc92435a9f340f3f4964db1.tar.bz2 perlweeklychallenge-club-183a28ffae02f5d1dcc92435a9f340f3f4964db1.zip | |
Merge pull request #9110 from andemark/challenge-244
Challenge 244 Solutions (Raku)
Diffstat (limited to 'challenge-244')
| -rw-r--r-- | challenge-244/mark-anderson/raku/ch-1.raku | 33 | ||||
| -rw-r--r-- | challenge-244/mark-anderson/raku/ch-2.raku | 48 |
2 files changed, 81 insertions, 0 deletions
diff --git a/challenge-244/mark-anderson/raku/ch-1.raku b/challenge-244/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..2443be6337 --- /dev/null +++ b/challenge-244/mark-anderson/raku/ch-1.raku @@ -0,0 +1,33 @@ +#!/usr/bin/env raku +use Test; +use Benchy; + +is-deeply count-smaller(8,1,2,2,3), (4,0,1,1,3); +is-deeply count-smaller(6,5,4,8), (2,1,0,3); +is-deeply count-smaller(2,2,2), (0,0,0); + +benchmark(); + +sub count-smaller(*@a) +{ + my $b = @a.Bag; + map { [+] $b{^$_} }, @a +} + +sub count-smaller-slow(*@a) +{ + map { + @a.grep(* < $_) }, @a +} + +sub benchmark +{ + my @a = (^1000).roll(10000); + + b 2, + { gist count-smaller-slow(@a) }, + { gist count-smaller(@a) } + + # Old: 5.12986256s + # New: 0.445446281s + # NEW version is 11.52x faster +} diff --git a/challenge-244/mark-anderson/raku/ch-2.raku b/challenge-244/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..1377532928 --- /dev/null +++ b/challenge-244/mark-anderson/raku/ch-2.raku @@ -0,0 +1,48 @@ +#!/usr/bin/env raku +use Test; +use Benchy; + +is group-hero(2,1,4), 141; + +benchmark(); + +sub postfix:<!>($num where * >= 0) { [*] 1..$num } +sub C($n, $r) { $n! / ($r! * ($n - $r)!) } + +sub group-hero(*@a) +{ + my $b = @a.Bag; + + my %h; + + for $b.keys -> $k + { + %h{$k} = sum map { C($b{$k}, $_) }, 1..$b{$k} + } + + sum gather for $b.keys.combinations.skip + { + take ([*] %h{$_}) * .max² * .min + } +} + +sub group-hero-slow(*@a) +{ + sum gather for @a.combinations.skip + { + take .max² * .min + } +} + +sub benchmark +{ + my @a = 5,5,5,9,4,4,2,2,2,2,7,7,7,7,7,8,9,2,2,1; + + b 1, + { say group-hero-slow(@a) }, + { say group-hero(@a) } + + #Old: 44.378420463s + #New: 0.036338161s + #NEW version is 1221.26x faster +} |
