aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUtil <bruce.gray@acm.org>2023-05-28 11:07:04 -0500
committerUtil <bruce.gray@acm.org>2023-05-28 11:07:04 -0500
commit0e83ede4a4757de79d7027f0703a575fea7920a9 (patch)
treec7edfbcc44b66dc623b1ceb319e5e3ec35e4e23a
parentbcc11a8dc2fa51933b649f20cf0a3325b9193b6d (diff)
downloadperlweeklychallenge-club-0e83ede4a4757de79d7027f0703a575fea7920a9.tar.gz
perlweeklychallenge-club-0e83ede4a4757de79d7027f0703a575fea7920a9.tar.bz2
perlweeklychallenge-club-0e83ede4a4757de79d7027f0703a575fea7920a9.zip
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;
+}