diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2023-09-04 00:36:58 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-04 00:36:58 +0100 |
| commit | 9b946478f8f6a7becaaad4a14dd31af0fb48de90 (patch) | |
| tree | 6f26fa1ab9ae0d5d93c1012f99c6b1fe116a1e6a | |
| parent | 66a8c794b932b7e9444f673405b65e72a86e0761 (diff) | |
| parent | 8d6e1060d389ab9bd2d9732d3b9441ed6fd0bf38 (diff) | |
| download | perlweeklychallenge-club-9b946478f8f6a7becaaad4a14dd31af0fb48de90.tar.gz perlweeklychallenge-club-9b946478f8f6a7becaaad4a14dd31af0fb48de90.tar.bz2 perlweeklychallenge-club-9b946478f8f6a7becaaad4a14dd31af0fb48de90.zip | |
Merge pull request #8640 from seaker/master
Feng Chang's update
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 @@ |
