diff options
| -rw-r--r-- | challenge-267/mark-anderson/raku/ch-1.raku | 16 | ||||
| -rw-r--r-- | challenge-267/mark-anderson/raku/ch-2.raku | 23 |
2 files changed, 39 insertions, 0 deletions
diff --git a/challenge-267/mark-anderson/raku/ch-1.raku b/challenge-267/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..f2c7107d7a --- /dev/null +++ b/challenge-267/mark-anderson/raku/ch-1.raku @@ -0,0 +1,16 @@ +#!/usr/bin/env raku +use Test; + +is product-sign(-1,-2,-3,-4,3,2,1), 1; +is product-sign(1,2,0,-2,-1), 0; +is product-sign(-1,-1,1,-1,2), -1; +is product-sign(1,2,3), 1; + +sub product-sign(*@ints) +{ + my %sign is Map = @ints.classify(*.sign); + + return 0 if %sign{0}; + return 1 unless %sign{-1}; + return +(%sign{-1} %% 2) || -1 +} diff --git a/challenge-267/mark-anderson/raku/ch-2.raku b/challenge-267/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..43f6e1e722 --- /dev/null +++ b/challenge-267/mark-anderson/raku/ch-2.raku @@ -0,0 +1,23 @@ +#!/usr/bin/env raku +use Test; + +is-deeply line-counts(([~] "a".."z"), 10 xx 26), ( 3, 60); +is-deeply line-counts("bbbcccdddaaa", flat 4, 10 xx 25), ( 2, 4); +is-deeply line-counts(([~] "a".."z"), 1 xx 26), ( 1, 26); +is-deeply line-counts(([~] "a".."z"), 100 xx 26), ( 26, 100); +is-deeply line-counts("theweeklychallenge" x 267, 1..26), (534, 92); + +sub line-counts($str, @widths) +{ + my @str = $str.comb; + + my %m is Map = "a".."z" Z=> @widths; + + my @lines = do while @str + { + my $k = ([\+] %m{@str}).first(* > 100, :k) // @str.elems; + @str.splice(0, $k) + } + + @lines.elems, [+] %m{|@lines.tail} +} |
