diff options
| author | Mark <53903062+andemark@users.noreply.github.com> | 2024-03-11 02:23:29 +0000 |
|---|---|---|
| committer | Mark <53903062+andemark@users.noreply.github.com> | 2024-03-11 02:23:29 +0000 |
| commit | 2bedb7bfa99f81df85ed29b48a10bfd9e10a9c5e (patch) | |
| tree | a7f3a014995b43fd31fe5df622879f43b93ae2a7 | |
| parent | de66833c83011f6f547877afa7ae5209f2b92377 (diff) | |
| download | perlweeklychallenge-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.raku | 12 | ||||
| -rw-r--r-- | challenge-260/mark-anderson/raku/ch-2.raku | 31 |
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)>>! +} |
