aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
3 files changed, 45 insertions, 0 deletions
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;