From eaaf2ee7172c6b56a0d2cf86fc0d8ea538c6be75 Mon Sep 17 00:00:00 2001 From: Mark <53903062+andemark@users.noreply.github.com> Date: Mon, 24 Apr 2023 07:11:55 +0000 Subject: Challenge 214 Solutions (Raku) --- challenge-214/mark-anderson/raku/ch-1.raku | 16 ++++++++++++++++ challenge-214/mark-anderson/raku/ch-2.raku | 27 +++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 challenge-214/mark-anderson/raku/ch-1.raku create mode 100644 challenge-214/mark-anderson/raku/ch-2.raku diff --git a/challenge-214/mark-anderson/raku/ch-1.raku b/challenge-214/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..aeb0059f6e --- /dev/null +++ b/challenge-214/mark-anderson/raku/ch-1.raku @@ -0,0 +1,16 @@ +#!/usr/bin/env raku +use Test; + +is-deeply rank-score(<1 2 4 3 5>), <5 4 S B G>>>.Str; +is-deeply rank-score(<8 5 6 7 4>), >>.Str; +is-deeply rank-score(<3 5 4 2>), >>.Str; +is-deeply rank-score(<2 5 2 1 7 5 1>), >>.Str; +is-deeply rank-score(<3 5>), ; + +sub rank-score($a) +{ + my $u := $a.unique.sort(-*); + my $s := ...*; + + $a.trans($u => $s.head($u)).comb(//) +} diff --git a/challenge-214/mark-anderson/raku/ch-2.raku b/challenge-214/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..fcc690a760 --- /dev/null +++ b/challenge-214/mark-anderson/raku/ch-2.raku @@ -0,0 +1,27 @@ +#!/usr/bin/env raku +use Adverb::Eject; +use Test; + +is collect-points(2,4,3,3,3,4,5,4,2), 23; +is collect-points(1,2,2,2,2,1), 20; +is collect-points(1), 1; +is collect-points(2,2,2,1,1,2,2,2), 40; +is collect-points(9,1,1,1,35,35,44,1,5,5,2,5,2,5,44,85,7,7,7,85,1,1,1), 91; + +sub collect-points(*@a) +{ + sum gather while @a + { + my $c = @a.pairs.classify({ .value }, :as{ .key }); + my $p = $c.first({ consecutive(.value) }); + my $a = $p ?? $p.value !! $c{ @a.Bag.minpairs.head.key }; + + @a[ $a ]:eject; + take $a.elems ** 2 + } +} + +sub consecutive(@a) +{ + .tail - .head == .end and [<] $_ given @a +} -- cgit