From e69cf5c18c93538495bd4f040febc0f0fe9e3440 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 19 May 2025 10:16:48 +0000 Subject: Challenge 322 Solutions (Raku) --- challenge-322/mark-anderson/raku/ch-1.raku | 21 +++++++++++++++++++++ challenge-322/mark-anderson/raku/ch-2.raku | 14 ++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 challenge-322/mark-anderson/raku/ch-1.raku create mode 100644 challenge-322/mark-anderson/raku/ch-2.raku 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/> (<$i>)/-$0/ given $str +} + +sub format-string-v2($str, $int) +{ + my @chars = $str.comb(//); + 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 +} -- cgit From 174dc182320b7103cc835481f798c0284af14d81 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 19 May 2025 15:43:03 +0000 Subject: Challenge 322 Solutions (Raku) --- challenge-322/mark-anderson/raku/ch-1.raku | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/challenge-322/mark-anderson/raku/ch-1.raku b/challenge-322/mark-anderson/raku/ch-1.raku index d40f05735a..d5fe719531 100644 --- a/challenge-322/mark-anderson/raku/ch-1.raku +++ b/challenge-322/mark-anderson/raku/ch-1.raku @@ -5,7 +5,22 @@ 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) +sub format-string($str, $int) +{ + # This is the version I like but it doesn't always work. + # The problem is with the {$int}. If it's hardcoded with + # the appropriate int then it works. Not sure what I'm + # doing wrong. 🤔 🤷 + + $str ~~ /^ + ( \-? \-? ) ** {0..$int} + ([ \-? \-? ] ** {$int} )* + $/; + + (flat $/[0]>>.join, $/[1]>>>>.join).join("-") +} + +sub format-string-v2($str is copy, $int) { $str ~~ s:g/"-"//; my $m = "." x ($str.chars mod $int or $int); @@ -13,7 +28,7 @@ sub format-string($str is copy, $int) S:g/> (<$i>)/-$0/ given $str } -sub format-string-v2($str, $int) +sub format-string-v3($str, $int) { my @chars = $str.comb(//); my $list = flat (@chars mod $int or Empty), ($int, $int...*); -- cgit