aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-256/mark-anderson/raku/ch-1.raku12
1 files changed, 7 insertions, 5 deletions
diff --git a/challenge-256/mark-anderson/raku/ch-1.raku b/challenge-256/mark-anderson/raku/ch-1.raku
index 11e69decd1..63d957d319 100644
--- a/challenge-256/mark-anderson/raku/ch-1.raku
+++ b/challenge-256/mark-anderson/raku/ch-1.raku
@@ -1,17 +1,19 @@
#!/usr/bin/env raku
-use Adverb::Eject;
use Test;
is max-pairs(<ab de ed bc>), 1;
is max-pairs(<aa ba cd ed>), 0;
is max-pairs(<uv qp st vu mn pq>), 2;
+# Credit to Niels van Dijke (PerlBoy1967) for this algorithm.
+
sub max-pairs(*@words)
{
- + do while @words
+ my $bh = BagHash.new;
+
+ + do gather for @words
{
- my $w = @words.pop;
- my $k = @words.first(* eq $w.flip, :k);
- @words[$k]:eject with $k
+ .take if $bh{$_};
+ $bh.add(.flip)
}
}