diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-05-28 23:16:01 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-28 23:16:01 +0100 |
| commit | 5e2d660a0064fb79ba93c73b9c564859b530b062 (patch) | |
| tree | 4143803d1c840da8c7090ccbc21482ecf9ce7b3c | |
| parent | 3431c1065b3ec5280db4a609a0f3d6d04f5bae00 (diff) | |
| parent | 0e83ede4a4757de79d7027f0703a575fea7920a9 (diff) | |
| download | perlweeklychallenge-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.raku | 17 | ||||
| -rw-r--r-- | challenge-218/bruce-gray/raku/ch-2.raku | 28 |
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; +} |
