aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Anderson <mark@andemark.io>2025-05-19 10:16:48 +0000
committerMark Anderson <mark@andemark.io>2025-05-19 10:16:48 +0000
commite69cf5c18c93538495bd4f040febc0f0fe9e3440 (patch)
tree97549f1805e7b3c62c54d2995d614023ad78eb27
parent6c467a026c325f27386294744ad5d0456d6c1c50 (diff)
downloadperlweeklychallenge-club-e69cf5c18c93538495bd4f040febc0f0fe9e3440.tar.gz
perlweeklychallenge-club-e69cf5c18c93538495bd4f040febc0f0fe9e3440.tar.bz2
perlweeklychallenge-club-e69cf5c18c93538495bd4f040febc0f0fe9e3440.zip
Challenge 322 Solutions (Raku)
-rw-r--r--challenge-322/mark-anderson/raku/ch-1.raku21
-rw-r--r--challenge-322/mark-anderson/raku/ch-2.raku14
2 files changed, 35 insertions, 0 deletions
diff --git a/challenge-322/mark-anderson/raku/ch-1.raku b/challenge-322/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..d40f05735a
--- /dev/null
+++ b/challenge-322/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,21 @@
+#!/usr/bin/env raku
+use Test;
+
+is format-string("ABC-D-E-F", 3), "ABC-DEF";
+is format-string("A-BC-D-E", 2), "A-BC-DE";
+is format-string("-A-B-CD-E", 4), "A-BCDE";
+
+sub format-string($str is copy, $int)
+{
+ $str ~~ s:g/"-"//;
+ my $m = "." x ($str.chars mod $int or $int);
+ my $i = "." x $int;
+ S:g/<?after <$m>> (<$i>)/-$0/ given $str
+}
+
+sub format-string-v2($str, $int)
+{
+ my @chars = $str.comb(/<upper>/);
+ my $list = flat (@chars mod $int or Empty), ($int, $int...*);
+ @chars.rotor($list)>>.join.join("-")
+}
diff --git a/challenge-322/mark-anderson/raku/ch-2.raku b/challenge-322/mark-anderson/raku/ch-2.raku
new file mode 100644
index 0000000000..b0df999fce
--- /dev/null
+++ b/challenge-322/mark-anderson/raku/ch-2.raku
@@ -0,0 +1,14 @@
+#/usr/bin/env raku
+use Test;
+
+is-deeply rank-array(55,22,44,33), (4,1,3,2);
+is-deeply rank-array(10,10,10), (1,1,1);
+is-deeply rank-array(5,1,1,4,3), (4,1,1,3,2);
+
+sub rank-array(+@ints)
+{
+ .{@ints} given [-Inf, |@ints].unique
+ .sort
+ .antipairs
+ .Map
+}