aboutsummaryrefslogtreecommitdiff
path: root/challenge-244
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-11-21 10:44:07 +0000
committerGitHub <noreply@github.com>2023-11-21 10:44:07 +0000
commit183a28ffae02f5d1dcc92435a9f340f3f4964db1 (patch)
tree8348f20ab4753c84534c7f9ff6c2a99ddd303557 /challenge-244
parentb3617506fad4da77d465d7a525e592a2445f9adb (diff)
parent6d6ad78bb6758a941bf8bacaca01b6e2135b7cd9 (diff)
downloadperlweeklychallenge-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.raku33
-rw-r--r--challenge-244/mark-anderson/raku/ch-2.raku48
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
+}