aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <53903062+andemark@users.noreply.github.com>2024-03-11 02:23:29 +0000
committerMark <53903062+andemark@users.noreply.github.com>2024-03-11 02:23:29 +0000
commit2bedb7bfa99f81df85ed29b48a10bfd9e10a9c5e (patch)
treea7f3a014995b43fd31fe5df622879f43b93ae2a7
parentde66833c83011f6f547877afa7ae5209f2b92377 (diff)
downloadperlweeklychallenge-club-2bedb7bfa99f81df85ed29b48a10bfd9e10a9c5e.tar.gz
perlweeklychallenge-club-2bedb7bfa99f81df85ed29b48a10bfd9e10a9c5e.tar.bz2
perlweeklychallenge-club-2bedb7bfa99f81df85ed29b48a10bfd9e10a9c5e.zip
Challenge 260 Solutions (Raku)
-rw-r--r--challenge-260/mark-anderson/raku/ch-1.raku12
-rw-r--r--challenge-260/mark-anderson/raku/ch-2.raku31
2 files changed, 43 insertions, 0 deletions
diff --git a/challenge-260/mark-anderson/raku/ch-1.raku b/challenge-260/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..c0489afbae
--- /dev/null
+++ b/challenge-260/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,12 @@
+#!/usr/bin/env raku
+use Test;
+
+ok unique-occurrences([1,2,2,1,1,3]);
+nok unique-occurrences([1,2,3]);
+ok unique-occurrences([-2,0,1,-2,1,1,0,1,-2,9]);
+
+sub unique-occurrences(@ints)
+{
+ my $values = @ints.Bag.values;
+ $values.elems == $values.unique.elems
+}
diff --git a/challenge-260/mark-anderson/raku/ch-2.raku b/challenge-260/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..5ce6cbbee5
--- /dev/null
+++ b/challenge-260/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,31 @@
+#!/usr/bin/env raku
+use experimental :cached;
+use Test;
+
+#
+# With help from https://www.youtube.com/watch?v=-MpL0X3AHAs
+#
+
+is rank('cat'), 3, 'cat';
+is rank('secret'), 255, 'secret';
+is rank('google'), 88, 'google';
+is rank('mississippi'), 13737, 'mississippi';
+is rank('1100010001100001111100000010101010001101111111111100101011100001').Int, 1340132963011393536, '64 bits';
+
+sub postfix:<!>($n) is cached { [*] 1..$n }
+
+sub rank($s)
+{
+ my @a = $s.comb;
+ my @ranks = @a.sort.squish.antipairs.Map{@a};
+ my $bag = @ranks.BagHash;
+
+ my @n = gather for @ranks -> $r
+ {
+ my @less-than = $bag.keys.grep(* < $r);
+ take ([+] $bag{@less-than}) / ([*] $bag.values>>!);
+ $bag{$r}--
+ }
+
+ 1 + [+] @n Z* (@ranks.end...0)>>!
+}