aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-05-28 23:16:01 +0100
committerGitHub <noreply@github.com>2023-05-28 23:16:01 +0100
commit5e2d660a0064fb79ba93c73b9c564859b530b062 (patch)
tree4143803d1c840da8c7090ccbc21482ecf9ce7b3c
parent3431c1065b3ec5280db4a609a0f3d6d04f5bae00 (diff)
parent0e83ede4a4757de79d7027f0703a575fea7920a9 (diff)
downloadperlweeklychallenge-club-5e2d660a0064fb79ba93c73b9c564859b530b062.tar.gz
perlweeklychallenge-club-5e2d660a0064fb79ba93c73b9c564859b530b062.tar.bz2
perlweeklychallenge-club-5e2d660a0064fb79ba93c73b9c564859b530b062.zip
Merge pull request #8147 from Util/c218
Add TWC 218 solutions by Bruce Gray (Raku only).
-rw-r--r--challenge-218/bruce-gray/raku/ch-1.raku17
-rw-r--r--challenge-218/bruce-gray/raku/ch-2.raku28
2 files changed, 45 insertions, 0 deletions
diff --git a/challenge-218/bruce-gray/raku/ch-1.raku b/challenge-218/bruce-gray/raku/ch-1.raku
new file mode 100644
index 0000000000..2bef804180
--- /dev/null
+++ b/challenge-218/bruce-gray/raku/ch-1.raku
@@ -0,0 +1,17 @@
+sub task1 ( @ns ) {
+ return @ns.combinations(3).map({ [*] .list }).max;
+ # No time this week for efficient logic.
+}
+
+
+my @tests =
+ ( 6, ( 3, 1, 2) ),
+ ( 24, ( 4, 1, 3, 2) ),
+ ( 3, ( -1, 0, 1, 3, 1) ),
+ ( 216, ( -8, 2, -9, 0, -4, 3) ),
+;
+use Test;
+plan +@tests;
+for @tests -> ( $expected, @in ) {
+ is task1(@in), $expected;
+}
diff --git a/challenge-218/bruce-gray/raku/ch-2.raku b/challenge-218/bruce-gray/raku/ch-2.raku
new file mode 100644
index 0000000000..e6d42dac86
--- /dev/null
+++ b/challenge-218/bruce-gray/raku/ch-2.raku
@@ -0,0 +1,28 @@
+sub task2 ( @m_original ) {
+ my @m = @m_original.map: *.clone.Array;
+ sub flip_col ( $c ) { @m[$_][$c] = + ! @m[$_][$c] for @m.keys }
+ sub flip_row ( $r ) { @m[$r][$_] = + ! @m[$r][$_] for @m[0].keys }
+
+ sub score ( ) {
+ return @m.map( *.join.parse-base(2) ).sum;
+ }
+
+ my $half = @m.elems / 2;
+
+ for @m.keys -> $r { flip_row($r) if @m[$r][0] == 0 }
+ for @m[0].keys.skip -> $c { flip_col($c) if @m».[$c].sum < $half }
+
+ return score();
+}
+
+
+my @tests =
+ ( 39, ( (0,0,1,1), (1,0,1,0), (1,1,0,0) ) ),
+ ( 1, ( (0,), ) ),
+ ( 1, ( (1,), ) ),
+;
+use Test;
+plan +@tests;
+for @tests -> ( $expected, @in ) {
+ is task2(@in), $expected;
+}