aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2024-04-30 23:22:10 +0100
committerGitHub <noreply@github.com>2024-04-30 23:22:10 +0100
commit361820eafe6d760eaed0092e9973925bef10c665 (patch)
tree02a4e9a7c0907bd78533f789355fd42acb24ce57
parent8af4e17dc115ce2e7a19f8fa11e70c799d2f6fb9 (diff)
parent62a695a268718828f23f435828de9ed9db437884 (diff)
downloadperlweeklychallenge-club-361820eafe6d760eaed0092e9973925bef10c665.tar.gz
perlweeklychallenge-club-361820eafe6d760eaed0092e9973925bef10c665.tar.bz2
perlweeklychallenge-club-361820eafe6d760eaed0092e9973925bef10c665.zip
Merge pull request #10007 from andemark/challenge-267
Challenge 267 Solutions (Raku)
-rw-r--r--challenge-267/mark-anderson/raku/ch-1.raku16
-rw-r--r--challenge-267/mark-anderson/raku/ch-2.raku23
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}
+}