aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad Sajid Anwar <Mohammad.Anwar@yahoo.com>2023-09-04 00:36:58 +0100
committerGitHub <noreply@github.com>2023-09-04 00:36:58 +0100
commit9b946478f8f6a7becaaad4a14dd31af0fb48de90 (patch)
tree6f26fa1ab9ae0d5d93c1012f99c6b1fe116a1e6a
parent66a8c794b932b7e9444f673405b65e72a86e0761 (diff)
parent8d6e1060d389ab9bd2d9732d3b9441ed6fd0bf38 (diff)
downloadperlweeklychallenge-club-9b946478f8f6a7becaaad4a14dd31af0fb48de90.tar.gz
perlweeklychallenge-club-9b946478f8f6a7becaaad4a14dd31af0fb48de90.tar.bz2
perlweeklychallenge-club-9b946478f8f6a7becaaad4a14dd31af0fb48de90.zip
Merge pull request #8640 from seaker/master
Feng Chang's update
-rwxr-xr-xchallenge-151/feng-chang/raku/ch-1.raku21
-rwxr-xr-xchallenge-151/feng-chang/raku/ch-2.raku7
-rwxr-xr-xchallenge-151/feng-chang/raku/test.raku28
-rwxr-xr-xchallenge-218/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-218/feng-chang/raku/ch-2.raku17
-rwxr-xr-xchallenge-218/feng-chang/raku/test.raku24
-rwxr-xr-xchallenge-219/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-219/feng-chang/raku/ch-2.raku43
-rwxr-xr-xchallenge-219/feng-chang/raku/test.raku22
-rwxr-xr-xchallenge-220/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-220/feng-chang/raku/ch-2.raku13
-rwxr-xr-xchallenge-220/feng-chang/raku/test.raku20
-rwxr-xr-xchallenge-221/feng-chang/raku/ch-1.raku6
-rwxr-xr-xchallenge-221/feng-chang/raku/ch-2.raku11
-rwxr-xr-xchallenge-221/feng-chang/raku/test.raku23
-rwxr-xr-xchallenge-222/feng-chang/raku/ch-1.raku8
-rwxr-xr-xchallenge-222/feng-chang/raku/ch-2.raku19
-rwxr-xr-xchallenge-222/feng-chang/raku/test.raku21
-rwxr-xr-xchallenge-223/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-223/feng-chang/raku/ch-2.raku17
-rwxr-xr-xchallenge-223/feng-chang/raku/test.raku23
-rwxr-xr-xchallenge-224/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-224/feng-chang/raku/ch-2.raku34
-rwxr-xr-xchallenge-224/feng-chang/raku/test.raku22
-rwxr-xr-xchallenge-225/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-225/feng-chang/raku/ch-2.raku8
-rwxr-xr-xchallenge-225/feng-chang/raku/test.raku31
-rwxr-xr-xchallenge-226/feng-chang/raku/ch-1.raku6
-rwxr-xr-xchallenge-226/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-226/feng-chang/raku/test.raku25
-rwxr-xr-xchallenge-227/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-227/feng-chang/raku/ch-2.raku126
-rwxr-xr-xchallenge-227/feng-chang/raku/test.raku26
-rwxr-xr-xchallenge-228/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-228/feng-chang/raku/ch-2.raku13
-rwxr-xr-xchallenge-228/feng-chang/raku/test.raku21
-rwxr-xr-xchallenge-229/feng-chang/raku/ch-1.raku11
-rwxr-xr-xchallenge-229/feng-chang/raku/ch-2.raku10
-rw-r--r--challenge-229/feng-chang/raku/data01.txt3
-rw-r--r--challenge-229/feng-chang/raku/data02.txt3
-rwxr-xr-xchallenge-229/feng-chang/raku/test.raku20
-rwxr-xr-xchallenge-230/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-230/feng-chang/raku/ch-2.raku6
-rwxr-xr-xchallenge-230/feng-chang/raku/test.raku20
-rwxr-xr-xchallenge-231/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-231/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-231/feng-chang/raku/test.raku27
47 files changed, 792 insertions, 3 deletions
diff --git a/challenge-151/feng-chang/raku/ch-1.raku b/challenge-151/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..baaff0d101
--- /dev/null
+++ b/challenge-151/feng-chang/raku/ch-1.raku
@@ -0,0 +1,21 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $s);
+
+my @Tree;
+my UInt $depth = 0;
+$s.split('|').map({ @Tree[$depth++] = .words.map({ $_ eq '*' ?? Nil !! $_.Int }).Array });
+@Tree = [] if +@Tree[0] == 0;
+
+my $min-depth = +@Tree;
+for ^@Tree -> $row {
+ for ^@Tree[$row] -> $col {
+ next without @Tree[$row;$col];
+ with @Tree[$row+1] {
+ next with @Tree[$row+1;2*$col];
+ next with @Tree[$row+1;2*$col+1];
+ $min-depth = $row + 1 if $row + 1 < $min-depth;
+ }
+ }
+}
+put $min-depth;
diff --git a/challenge-151/feng-chang/raku/ch-2.raku b/challenge-151/feng-chang/raku/ch-2.raku
index 4fa124eac5..ffcb00fe5e 100755
--- a/challenge-151/feng-chang/raku/ch-2.raku
+++ b/challenge-151/feng-chang/raku/ch-2.raku
@@ -4,6 +4,7 @@ unit sub MAIN(*@V);
put max-gain(@V);
-multi max-gain() { 0 }
-multi max-gain(@V where *.elems == 1|2) { @V.max }
-multi max-gain(@V --> UInt:D) { max(@V[0] + max-gain(@V.tail(*-2)), max-gain(@V.tail(*-1))) }
+multi max-gain() { 0 }
+multi max-gain([$a]) { $a }
+multi max-gain([$a, $b]) { max($a, $b) }
+multi max-gain(@V) { max(@V[0] + max-gain(@V.tail(*-2)), max-gain(@V.tail(*-1))) }
diff --git a/challenge-151/feng-chang/raku/test.raku b/challenge-151/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..aed18159dc
--- /dev/null
+++ b/challenge-151/feng-chang/raku/test.raku
@@ -0,0 +1,28 @@
+#!/bin/env raku
+
+# The Weekly Challenge 151
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Binary Tree Depth
+pwc-test './ch-1.raku', '', 0, 'Binary Tree Depth: "" => 0';
+pwc-test './ch-1.raku', '1', 1, 'Binary Tree Depth: "1" => 1';
+pwc-test './ch-1.raku', '1 | 2', 2, 'Binary Tree Depth: "1 | 2" => 2';
+pwc-test './ch-1.raku', '1 | 2 3', 2, 'Binary Tree Depth: "1 | 2 3" => 2';
+pwc-test './ch-1.raku', '1 | 2 3 | 4', 2, 'Binary Tree Depth: "1 | 2 3 | 4" => 2';
+pwc-test './ch-1.raku', '1 | 2 3 | 4 5', 2, 'Binary Tree Depth: "1 | 2 3 | 4 5" => 2';
+pwc-test './ch-1.raku', '1 | 2 3 | 4 5 6', 3, 'Binary Tree Depth: "1 | 2 3 | 4 5 6" => 3';
+pwc-test './ch-1.raku', '1 | 2 3 | 4 5 * 6', 3, 'Binary Tree Depth: "1 | 2 3 | 4 5 * 6" => 3';
+
+pwc-test './ch-1.raku', '1 | 2 3 | 4 * * 5 | * 6', 3, 'Binary Tree Depth: "1 | 2 3 | 4 * * 5 | * 6" => 3';
+
+# Task 2, Rob The House
+pwc-test './ch-2.raku', |<2 4 5>, 7, 'Rob The House: (2, 4, 5) => 7';
+pwc-test './ch-2.raku', |<4 2 3 6 5 3>, 13, 'Rob The House: (4, 2, 3, 6, 5, 3) => 13';
+
+done-testing;
diff --git a/challenge-218/feng-chang/raku/ch-1.raku b/challenge-218/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..be3ae57352
--- /dev/null
+++ b/challenge-218/feng-chang/raku/ch-1.raku
@@ -0,0 +1,5 @@
+#!/bin/env raku
+
+unit sub MAIN(*@N where @N.elems ≥ 3);
+
+put @N.combinations(3).map({ [*] $_ }).max;
diff --git a/challenge-218/feng-chang/raku/ch-2.raku b/challenge-218/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..00169038f2
--- /dev/null
+++ b/challenge-218/feng-chang/raku/ch-2.raku
@@ -0,0 +1,17 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $s);
+
+use MONKEY-SEE-NO-EVAL;
+
+my @N is Array = EVAL $s;
+
+for ^+@N -> $j {
+ @N[$j] = @N[$j].map({ 1 - $_ }).Array if @N[$j;0] == 0;
+}
+
+for ^+@N[0] -> $j {
+ @N[*;$j] = @N[*;$j].map({ 1 - $_ }).Array if @N[*;$j].sum < +@N/2;
+}
+
+put @N.map({ .join.parse-base(2) }).sum;
diff --git a/challenge-218/feng-chang/raku/test.raku b/challenge-218/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..d5cb438f68
--- /dev/null
+++ b/challenge-218/feng-chang/raku/test.raku
@@ -0,0 +1,24 @@
+#!/bin/env raku
+
+# The Weekly Challenge 218
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Maximum Product
+pwc-test './ch-1.raku', '--', |<3 1 2>, 6, 'Maximum Product: 3 1 2 => 6';
+pwc-test './ch-1.raku', '--', |<4 1 3 2>, 24, 'Maximum Product: 4 1 3 2 => 24';
+pwc-test './ch-1.raku', '--', |<-1 0 1 3 1>, 3, 'Maximum Product: -1 0 1 3 1 => 3';
+pwc-test './ch-1.raku', '--', |<-8 2 -9 0 -4 3>, 216, 'Maximum Product: -8 2 -9 0 -4 3 => 216';
+
+# Task 2, Matrix Score
+pwc-test './ch-2.raku', '[[0,0,1,1], [1,0,1,0], [1,1,0,0]]',
+ 39,
+ 'Matrix Score: [[0,0,1,1], [1,0,1,0], [1,1,0,0]] => 39';
+pwc-test './ch-2.raku', '[[0]]', 1, 'Matrix Score: [[0]] => 1';
+
+done-testing;
diff --git a/challenge-219/feng-chang/raku/ch-1.raku b/challenge-219/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..ed5a027e6f
--- /dev/null
+++ b/challenge-219/feng-chang/raku/ch-1.raku
@@ -0,0 +1,5 @@
+#!/bin/env raku
+
+unit sub MAIN(*@N where @N.all ~~ Int);
+
+put @N.map(*²).sort.join(', ');
diff --git a/challenge-219/feng-chang/raku/ch-2.raku b/challenge-219/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..0df6f4e3cf
--- /dev/null
+++ b/challenge-219/feng-chang/raku/ch-2.raku
@@ -0,0 +1,43 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $input);
+
+use MONKEY-SEE-NO-EVAL;
+
+my (@costs, @days);
+EVAL $input;
+
+my $expenditure = Inf;
+my @Q = [@days.clone, 0], ;
+
+while @Q {
+ state @offsets = 1, 7, 30;
+ my @Q_;
+
+ for @Q -> (@days, $exp) {
+ next if $exp > $expenditure;
+
+ if +@days == 0 {
+ $expenditure = min($exp, $expenditure);
+ next;
+ }
+
+ for ^3 -> $j {
+ my @days_ = @days.clone;
+
+ my $last_day = @days_[0] + @offsets[$j];
+ my $cnt = 0;
+ while +@days_ && @days_[0] < $last_day {
+ @days_.shift;
+ ++$cnt;
+ }
+ next if $cnt < @costs[$j] / @costs[0];
+
+ @Q_.push([@days_, $exp + @costs[$j]]);
+ }
+ }
+
+ @Q = @Q_;
+}
+
+put $expenditure;
diff --git a/challenge-219/feng-chang/raku/test.raku b/challenge-219/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..9ee07dcb18
--- /dev/null
+++ b/challenge-219/feng-chang/raku/test.raku
@@ -0,0 +1,22 @@
+#!/bin/env raku
+
+# The Weekly Challenge 219
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Sorted Squares
+pwc-test './ch-1.raku', '--', |<-2 -1 0 3 4>, '0, 1, 4, 9, 16', 'Sorted Squares: -2, -1, 0, 3, 4 => 0, 1, 4, 9, 16';
+pwc-test './ch-1.raku', '--', |<5 -4 -1 3 6>, '1, 9, 16, 25, 36', 'Sorted Squares: 5, -4, -1, 3, 6 => 1, 9, 16, 25, 36';
+
+# Task 2, Travel Expenditure
+pwc-test './ch-2.raku', '@costs = (2, 7, 25); @days = (1, 5, 6, 7, 9, 15)', 11,
+ 'Travel Expenditure: @costs = (2, 7, 25); @days = (1, 5, 6, 7, 9, 15) => 11';
+pwc-test './ch-2.raku', '@costs = (2, 7, 25); @days = (1, 2, 3, 5, 7, 10, 11, 12, 14, 20, 30, 31)', 20,
+ 'Travel Expenditure: @costs = (2, 7, 25); @days = (1, 2, 3, 5, 7, 10, 11, 12, 14, 20, 30, 31) => 20';
+
+done-testing;
diff --git a/challenge-220/feng-chang/raku/ch-1.raku b/challenge-220/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..2ddceb60c2
--- /dev/null
+++ b/challenge-220/feng-chang/raku/ch-1.raku
@@ -0,0 +1,5 @@
+#!/bin/env raku
+
+unit sub MAIN(*@S);
+
+put @S.map({ .lc.comb.Set }).reduce(&infix:<(&)>).keys.sort.join(', ');
diff --git a/challenge-220/feng-chang/raku/ch-2.raku b/challenge-220/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..1a71714865
--- /dev/null
+++ b/challenge-220/feng-chang/raku/ch-2.raku
@@ -0,0 +1,13 @@
+#!/bin/env raku
+
+unit sub MAIN(*@N);
+
+sub is-square(UInt:D \S --> Bool:D) { sqrt(S).Int² == S }
+
+@N = @N».Int;
+
+put @N.permutations
+ .grep(-> @M { (^(+@N-1)).map({ is-square(@M[$_] + @M[$_+1]) }).all })
+ .unique(:with(&[eqv]))
+ .map({ .join(', ') })
+ .join("\n");
diff --git a/challenge-220/feng-chang/raku/test.raku b/challenge-220/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..066e1999a2
--- /dev/null
+++ b/challenge-220/feng-chang/raku/test.raku
@@ -0,0 +1,20 @@
+#!/bin/env raku
+
+# The Weekly Challenge 220
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Common Characters
+pwc-test './ch-1.raku', |<Perl Rust Raku>, 'r', 'Common Characters: Perl, Rust, Raku => r';
+pwc-test './ch-1.raku', |<love live leave>, 'e, l, v', 'Common Characters: love, live, leave => e, l, v';
+
+# Task 2, Squareful
+pwc-test './ch-2.raku', |<1 17 8>, "1, 8, 17\n17, 8, 1", 'Squareful: (1, 17, 8) => (1, 8, 17), (17, 8, 1)';
+pwc-test './ch-2.raku', |<2 2 2>, '2, 2, 2', 'Squareful: (2, 2, 2) => (2, 2, 2)';
+
+done-testing;
diff --git a/challenge-221/feng-chang/raku/ch-1.raku b/challenge-221/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..d9c697cad6
--- /dev/null
+++ b/challenge-221/feng-chang/raku/ch-1.raku
@@ -0,0 +1,6 @@
+#!/bin/env raku
+
+unit sub MAIN(*@S);
+
+my %chars = @S.pop.comb.Bag;
+put @S.grep({ .comb.Bag (<=) %chars })».chars.sum;
diff --git a/challenge-221/feng-chang/raku/ch-2.raku b/challenge-221/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..3e742b43b7
--- /dev/null
+++ b/challenge-221/feng-chang/raku/ch-2.raku
@@ -0,0 +1,11 @@
+#!/bin/env raku
+
+unit sub MAIN(*@N where @N.all ~~ Int);
+
+my method is-arithmetic-subsequence(@N : --> Bool:D) {
+ return False if +@N < 2;
+ [==] (^(+@N-1)).map({ @N[$_+1] - @N[$_] })
+}
+
+@N = +«@N;
+put @N.combinations.grep(*.&is-arithmetic-subsequence)».elems.max;
diff --git a/challenge-221/feng-chang/raku/test.raku b/challenge-221/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..b4baed1251
--- /dev/null
+++ b/challenge-221/feng-chang/raku/test.raku
@@ -0,0 +1,23 @@
+#!/bin/env raku
+
+# The Weekly Challenge 221
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Good Strings
+pwc-test './ch-1.raku', |<cat bt hat tree>, 'atach', 6,
+ 'Good Strings: @words = ("cat", "bt", "hat", "tree"), $chars = "atach" => 6';
+pwc-test './ch-1.raku', |<hello world challenge>, 'welldonehopper', 10,
+ 'Good Strings: @words = ("hello", "world", "challenge"), $chars = "welldonehopper" => 10';
+
+# Task 2, Arithmetic Subsequence
+pwc-test './ch-2.raku', |<9 4 7 2 10>, 3, 'Arithmetic Subsequence: (9, 4, 7, 2, 10) => 3';
+pwc-test './ch-2.raku', |<3 6 9 12>, 4, 'Arithmetic Subsequence: (3, 6, 9, 12) => 4';
+pwc-test './ch-2.raku', |<20 1 15 3 10 5 8>, 4, 'Arithmetic Subsequence: (20, 1, 15, 3, 10, 5, 8) => 4';
+
+done-testing;
diff --git a/challenge-222/feng-chang/raku/ch-1.raku b/challenge-222/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..c217fafd7f
--- /dev/null
+++ b/challenge-222/feng-chang/raku/ch-1.raku
@@ -0,0 +1,8 @@
+#!/bin/env raku
+
+unit sub MAIN(*@N where @N.all > 0);
+
+@N = +«@N;
+my @M = @N.sort;
+
+put (^+@N).grep({ @N[$_] == @M[$_] }).elems;
diff --git a/challenge-222/feng-chang/raku/ch-2.raku b/challenge-222/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..0ed30faa52
--- /dev/null
+++ b/challenge-222/feng-chang/raku/ch-2.raku
@@ -0,0 +1,19 @@
+#!/bin/env raku
+
+unit sub MAIN(*@N where @N.all > 0);
+
+@N = +«@N;
+
+while +@N > 1 {
+ my \ndx-a = @N.first(@N.max, :k);
+ my (\a) = @N.splice(ndx-a, 1); # No. 1
+
+ my \ndx-b = @N.first(@N.max, :k);
+ my (\b) = @N.splice(ndx-b, 1); # No. 2
+
+ my \d = a - b;
+ @N.splice(ndx-a - (ndx-a > ndx-b), 0, d) if d;
+ #put "pick {a} and {b} => ({@N.join(', ')})";
+}
+
+put +@N ?? @N[0] !! 0;
diff --git a/challenge-222/feng-chang/raku/test.raku b/challenge-222/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..877c3e9603
--- /dev/null
+++ b/challenge-222/feng-chang/raku/test.raku
@@ -0,0 +1,21 @@
+#!/bin/env raku
+
+# The Weekly Challenge 222
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Matching Members
+pwc-test './ch-1.raku', |<1 1 4 2 1 3>, 3, 'Matching Members: 1, 1, 4, 2, 1, 3 => 3';
+pwc-test './ch-1.raku', |<5 1 2 3 4>, 0, 'Matching Members: 5, 1, 2, 3, 4 => 0';
+pwc-test './ch-1.raku', |<1 2 3 4 5>, 5, 'Matching Members: 1, 2, 3, 4, 5 => 5';
+
+# Task 2, Last Member
+pwc-test './ch-2.raku', |<2 7 4 1 8 1>, 1, 'Last Member: (2, 7, 4, 1, 8, 1) => 1';
+pwc-test './ch-2.raku', |<1 1>, 0, 'Last Member: (1, 1) => 0';
+
+done-testing;
diff --git a/challenge-223/feng-chang/raku/ch-1.raku b/challenge-223/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..59293b1a83
--- /dev/null
+++ b/challenge-223/feng-chang/raku/ch-1.raku
@@ -0,0 +1,5 @@
+#!/bin/env raku
+
+unit sub MAIN(UInt:D $n);
+
+put (2..$n).grep(*.is-prime).elems;
diff --git a/challenge-223/feng-chang/raku/ch-2.raku b/challenge-223/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..82f2f56ab6
--- /dev/null
+++ b/challenge-223/feng-chang/raku/ch-2.raku
@@ -0,0 +1,17 @@
+#!/bin/env raku
+
+unit sub MAIN(*@N where @N.all ≥ 0);
+
+put max-coins(|@N);
+
+multi max-coins($n) { $n }
+multi max-coins($m, $n) { $m * $n + max($m, $n) }
+
+multi max-coins(*@N) {
+ gather {
+ for 1 ..^ +@N - 1 -> $i {
+ my @M = @N.clone;
+ @M.splice($i, 1);
+ take max-coins(|@M) + [*] @N[$i-1 .. $i+1];
+ } }.max
+}
diff --git a/challenge-223/feng-chang/raku/test.raku b/challenge-223/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..7d88f54999
--- /dev/null
+++ b/challenge-223/feng-chang/raku/test.raku
@@ -0,0 +1,23 @@
+#!/bin/env raku
+
+# The Weekly Challenge 223
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Count Primes
+pwc-test './ch-1.raku', 10, 4, 'Count Primes: 10 => 4';
+pwc-test './ch-1.raku', 7, 4, 'Count Primes: 7 => 4';
+pwc-test './ch-1.raku', 0, 0, 'Count Primes: 0 => 0';
+pwc-test './ch-1.raku', 20, 8, 'Count Primes: 20 => 8';
+
+# Task 2, Max Coins
+pwc-test './ch-2.raku', |<3 1 5 8>, 167, 'Max Coins: (3, 1, 5, 8) => 167';
+pwc-test './ch-2.raku', |<1 5>, 10, 'Max Coins: (1, 5) => 10';
+pwc-test './ch-2.raku', |<3 8>, 32, 'Max Coins: (3, 8) => 32';
+
+done-testing;
diff --git a/challenge-224/feng-chang/raku/ch-1.raku b/challenge-224/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..633ddd84b9
--- /dev/null
+++ b/challenge-224/feng-chang/raku/ch-1.raku
@@ -0,0 +1,5 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $src, Str:D $tgt);
+
+put $tgt.comb.Bag (<=) $src.comb.Bag;
diff --git a/challenge-224/feng-chang/raku/ch-2.raku b/challenge-224/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..e4a62d9972
--- /dev/null
+++ b/challenge-224/feng-chang/raku/ch-2.raku
@@ -0,0 +1,34 @@
+#!/bin/env raku
+
+unit sub MAIN(UInt:D $N where *.chars > 2);
+
+sub is-additive(Str:D $N is rw, Str:D $m is rw, Str:D $n is rw --> Bool:D) {
+ my $s = $m ~ $n;
+ return True if $N eq $s;
+ return False unless $N.starts-with($s);
+
+ $N .= substr($s.chars);
+ ($m, $n) = ($n, $m + $n);
+ while $N {
+ ($m, $n) = ($n, $m + $n);
+ return False unless $N.starts-with($m);
+
+ $N .= substr($m.chars);
+ }
+
+ True
+}
+
+my $M = $N;
+for 2..max(2, (($M.chars - 1) div 2)) -> $i {
+ for 1..($i-1) -> $j {
+ my $m = $M.substr(0, $j);
+ my $n = $M.substr($j, $i - $j);
+ if is-additive($M, $m, $n) {
+ put 'true';
+ exit 0;
+ }
+ }
+}
+
+put 'false';
diff --git a/challenge-224/feng-chang/raku/test.raku b/challenge-224/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..6b127060cf
--- /dev/null
+++ b/challenge-224/feng-chang/raku/test.raku
@@ -0,0 +1,22 @@
+#!/bin/env raku
+
+# The Weekly Challenge 224
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Special Notes
+pwc-test './ch-1.raku', |<abc xyz>, 'False', 'Special Notes: $source = "abc", $target = "xyz" => False';
+pwc-test './ch-1.raku', |<scriptinglanguage perl>, 'True', 'Special Notes: $source = "scriptinglanguage", $target = "perl" => True';
+pwc-test './ch-1.raku', |<aabbcc abc>, 'True', 'Special Notes: $source = "aabbcc", $target = "abc" => True';
+
+# Task 2, Additive Number
+pwc-test './ch-2.raku', 112358, 'true', 'Additive Number: 112358 => true';
+pwc-test './ch-2.raku', 12345, 'false', 'Additive Number: 12345 => false';
+pwc-test './ch-2.raku', 199100199, 'true', 'Additive Number: 199100199 => true';
+
+done-testing;
diff --git a/challenge-225/feng-chang/raku/ch-1.raku b/challenge-225/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..10c62be03c
--- /dev/null
+++ b/challenge-225/feng-chang/raku/ch-1.raku
@@ -0,0 +1,5 @@
+#!/bin/env raku
+
+unit sub MAIN(*@sentences);
+
+put @sentences».words».elems.max;
diff --git a/challenge-225/feng-chang/raku/ch-2.raku b/challenge-225/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..fe6d549ba4
--- /dev/null
+++ b/challenge-225/feng-chang/raku/ch-2.raku
@@ -0,0 +1,8 @@
+#!/bin/env raku
+
+unit sub MAIN(*@N);
+
+my @left = 0, |([\+] @N.head(*-1));
+my @right = (0, |([\+] @N.reverse.head(*-1))).reverse;
+
+put (@left «-» @right)».abs.join(', ');
diff --git a/challenge-225/feng-chang/raku/test.raku b/challenge-225/feng-chang/raku/test.raku
new file mode 100755
index 0000000000..6429f14314
--- /dev/null
+++ b/challenge-225/feng-chang/raku/test.raku
@@ -0,0 +1,31 @@
+#!/bin/env raku
+
+# The Weekly Challenge 225
+use Test;
+
+sub pwc-test(Str:D $script, *@input) {
+ my ($expect, $assertion) = @input.splice(*-2, 2);
+ my $p = run $script, |@input, :out;
+ is $p.out.slurp(:close).chomp, $expect, $assertion;
+}
+
+# Task 1, Max Words
+pwc-test './ch-1.raku',
+ "Perl and Raku belong to the same family.",
+ "I love Perl.",
+ "The Perl and Raku Conference.",
+ 8,
+ 'Max Words: example 1, output: 8';
+pwc-test './ch-1.raku',
+ "The Weekly Challenge.",
+ "Python is the most popular guest language.",
+ "Team PWC has over 300 members.",
+ 7,
+ 'Max Words: example 2, output: 7';
+
+# Task 2, Left Right Sum Diff
+pwc-test './ch-2.raku', |<10 4 8 3>, '15, 1, 11, 22', 'Left Right Sum Diff: (10, 4, 8, 3) => (15, 1, 11, 22)';
+pwc-test './ch-2.raku', 0, '0', 'Left Right Sum Diff: (0) => (0)';
+pwc-test './ch-2.raku', |<1 2 3 4 5>, '14, 11, 6, 1, 10', 'Left Right Sum Diff: (1, 2, 3, 4, 5) => (14, 11, 6, 1, 10)';
+
+done-testing;
diff --git a/challenge-226/feng-chang/raku/ch-1.raku b/challenge-226/feng-chang/raku/ch-1.raku
new file mode 100755
index 0000000000..a69db2c2d9
--- /dev/null
+++ b/challenge-226/feng-chang/raku/ch-1.raku
@@ -0,0 +1,6 @@
+#!/bin/env raku
+
+unit sub MAIN(Str:D $str, *@indices where $str.chars == +@indices);
+
+my %m = @indices Z=> ^+@indices;
+put $str.comb[%m{%m.keys.sort}].join;
diff --git a/challenge-226/feng-chang/raku/ch-2.raku b/challenge-226/feng-chang/raku/ch-2.raku
new file mode 100755
index 0000000000..11498af3da
--- /dev/null
+++ b/challenge-226/feng-chang/raku/ch-2.raku
@@ -0,0 +1,5 @@