From 23f1996133365a617dd5986568fca5e75917050c Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Wed, 3 May 2023 18:27:31 +0800 Subject: fix typo --- challenge-215/feng-chang/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-215/feng-chang/README.md b/challenge-215/feng-chang/README.md index 2ce326a102..26526f5e69 100644 --- a/challenge-215/feng-chang/README.md +++ b/challenge-215/feng-chang/README.md @@ -1,2 +1,2 @@ # blog -* [PWC #215](https://seaker.github.io/jekyll/update/2023/05/02/PWC-125.html) +* [PWC #215](https://seaker.github.io/jekyll/update/2023/05/02/PWC-215.html) -- cgit From 68b170908dbf3f8c796c514ce530a9a9e100d490 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 4 Sep 2023 16:11:12 +0800 Subject: challenge 233, raku solutions --- challenge-233/feng-chang/raku/ch-1.raku | 5 +++++ challenge-233/feng-chang/raku/ch-2.raku | 6 ++++++ challenge-233/feng-chang/raku/test.raku | 31 +++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100755 challenge-233/feng-chang/raku/ch-1.raku create mode 100755 challenge-233/feng-chang/raku/ch-2.raku create mode 100755 challenge-233/feng-chang/raku/test.raku diff --git a/challenge-233/feng-chang/raku/ch-1.raku b/challenge-233/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..0bbdd157b3 --- /dev/null +++ b/challenge-233/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@words); + +put @words.combinations(2).grep({ .[0].comb.Set eqv .[1].comb.Set }).join("\n"); diff --git a/challenge-233/feng-chang/raku/ch-2.raku b/challenge-233/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..a82de442e2 --- /dev/null +++ b/challenge-233/feng-chang/raku/ch-2.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +unit sub MAIN(*@N); + +my %freq = @N.Bag; +put @N.sort({ %freq{$_}, -$_ }).join(','); diff --git a/challenge-233/feng-chang/raku/test.raku b/challenge-233/feng-chang/raku/test.raku new file mode 100755 index 0000000000..ef98a74848 --- /dev/null +++ b/challenge-233/feng-chang/raku/test.raku @@ -0,0 +1,31 @@ +#!/bin/env raku + +# The Weekly Challenge 233 +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, Similar Words +pwc-test + './ch-1.raku', |, + "aba aabb\nbac aabc", + 'Similar Words: ("aba", "aabb", "abcd", "bac", "aabc") => "aba aabb\nbac aabc"'; +pwc-test + './ch-1.raku', |, + "aabb ab\naabb ba\nab ba", + 'Similar Words: ("aabb", "ab", "ba") => "aabb ab\naabb ba\nab ba"'; +pwc-test + './ch-1.raku', |, + "", + 'Similar Words: ("nba", "cba", "dba") => ""'; + +# Task 2, Frequency Sort + pwc-test './ch-2.raku', |<1 1 2 2 2 3>, '3,1,1,2,2,2', 'Frequency Sort: 1,1,2,2,2,3 => 3,1,1,2,2,2'; + pwc-test './ch-2.raku', |<2 3 1 3 2>, '1,3,3,2,2', 'Frequency Sort: 2,3,1,3,2 => 1,3,3,2,2'; + pwc-test './ch-2.raku', |<-- -1 1 -6 4 5 -6 1 4 1>, '5,-1,4,4,-6,-6,1,1,1', 'Frequency Sort: -1,1,-6,4,5,-6,1,4,1 => 5,-1,4,4,-6,-6,1,1,1'; + +done-testing; -- cgit From fecca996f1e3991501c62439626eb5b90df40559 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Fri, 8 Sep 2023 10:11:51 +0800 Subject: fix --- challenge-233/feng-chang/raku/ch-1.raku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-233/feng-chang/raku/ch-1.raku b/challenge-233/feng-chang/raku/ch-1.raku index 0bbdd157b3..720a718cfb 100755 --- a/challenge-233/feng-chang/raku/ch-1.raku +++ b/challenge-233/feng-chang/raku/ch-1.raku @@ -2,4 +2,4 @@ unit sub MAIN(*@words); -put @words.combinations(2).grep({ .[0].comb.Set eqv .[1].comb.Set }).join("\n"); +put @words.combinations(2).grep({ .[0].comb ≡ .[1].comb }).join("\n"); -- cgit From 9a312a5b2784d862c963c48c4721203d4ff64c4b Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 11 Sep 2023 18:12:24 +0800 Subject: challenge 234, raku solutions --- challenge-234/feng-chang/raku/ch-1.raku | 5 +++++ challenge-234/feng-chang/raku/ch-2.raku | 6 ++++++ challenge-234/feng-chang/raku/test.raku | 35 +++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100755 challenge-234/feng-chang/raku/ch-1.raku create mode 100755 challenge-234/feng-chang/raku/ch-2.raku create mode 100755 challenge-234/feng-chang/raku/test.raku diff --git a/challenge-234/feng-chang/raku/ch-1.raku b/challenge-234/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..5163d74a08 --- /dev/null +++ b/challenge-234/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@words); + +put ([(&)] @words.map({ .comb.Bag })).map({ .key xx .value }); diff --git a/challenge-234/feng-chang/raku/ch-2.raku b/challenge-234/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..69849e5bb2 --- /dev/null +++ b/challenge-234/feng-chang/raku/ch-2.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +@ints = +«@ints; +put +@ints.combinations(3).grep({ .[0]!=.[1] && .[1]!=.[2] && .[2]!=.[0] }); diff --git a/challenge-234/feng-chang/raku/test.raku b/challenge-234/feng-chang/raku/test.raku new file mode 100755 index 0000000000..858a89c782 --- /dev/null +++ b/challenge-234/feng-chang/raku/test.raku @@ -0,0 +1,35 @@ +#!/bin/env raku + +# The Weekly Challenge 234 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Common Characters +pwc-test :deeply, + './ch-1.raku', |, + 'j a'.words.Bag, + 'Common Characters: ("java", "javascript", "julia") => "j a"'; +pwc-test :deeply, + './ch-1.raku', |, + 'e l l'.words.Bag, + 'Common Characters: ("bella", "label", "roller") => "e l l"'; +pwc-test :deeply, + './ch-1.raku', |, + 'c o'.words.Bag, + 'Common Characters: ("cool", "lock", "cook") => "c o"'; + +# Task 2, Unequal Triplets + pwc-test './ch-2.raku', |<4 4 2 4 3>, 3, 'Unequal Triplets: 4, 4, 2, 4, 3 => 3'; + pwc-test './ch-2.raku', |<1 1 1 1 1>, 0, 'Unequal Triplets: 1, 1, 1, 1, 1 => 0'; + pwc-test './ch-2.raku', |<4 7 1 10 7 4 1 1>, 28, 'Unequal Triplets: 4, 7, 1, 10, 7, 4, 1, 1 => 28'; + +done-testing; -- cgit From 50ab251ba618792b93668d0e61569474f5f66f1e Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Thu, 14 Sep 2023 10:53:34 +0800 Subject: fix --- challenge-234/feng-chang/raku/ch-2.raku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-234/feng-chang/raku/ch-2.raku b/challenge-234/feng-chang/raku/ch-2.raku index 69849e5bb2..c4c96ca5d6 100755 --- a/challenge-234/feng-chang/raku/ch-2.raku +++ b/challenge-234/feng-chang/raku/ch-2.raku @@ -3,4 +3,4 @@ unit sub MAIN(*@ints); @ints = +«@ints; -put +@ints.combinations(3).grep({ .[0]!=.[1] && .[1]!=.[2] && .[2]!=.[0] }); +put +@ints.combinations(3).grep({ .all == .one }); -- cgit From fc07c94d7c3b4185fa5bd787522dbdae31c58e3f Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 18 Sep 2023 17:44:58 +0800 Subject: challenge 235, raku solutions --- challenge-235/feng-chang/raku/ch-1.raku | 5 +++++ challenge-235/feng-chang/raku/ch-2.raku | 5 +++++ challenge-235/feng-chang/raku/test.raku | 26 ++++++++++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100755 challenge-235/feng-chang/raku/ch-1.raku create mode 100755 challenge-235/feng-chang/raku/ch-2.raku create mode 100755 challenge-235/feng-chang/raku/test.raku diff --git a/challenge-235/feng-chang/raku/ch-1.raku b/challenge-235/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..744159fa8b --- /dev/null +++ b/challenge-235/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put so (^@ints).grep({ [<] @ints[(^@ints).grep(*!=$_)] }); diff --git a/challenge-235/feng-chang/raku/ch-2.raku b/challenge-235/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..462cf0a2b1 --- /dev/null +++ b/challenge-235/feng-chang/raku/ch-2.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put @ints.map({ $_ || 0 xx 2 }).flat[^@ints]; diff --git a/challenge-235/feng-chang/raku/test.raku b/challenge-235/feng-chang/raku/test.raku new file mode 100755 index 0000000000..31899f731f --- /dev/null +++ b/challenge-235/feng-chang/raku/test.raku @@ -0,0 +1,26 @@ +#!/bin/env raku + +# The Weekly Challenge 235 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Remove One +pwc-test './ch-1.raku', |<0 2 9 4 6>, 'True', 'Remove One: (0, 2, 9, 4, 6) => True'; +pwc-test './ch-1.raku', |<5 1 3 2>, 'False', 'Remove One: (5, 1, 3, 2) => False'; +pwc-test './ch-1.raku', |<2 2 3>, 'True', 'Remove One: (2, 2, 3) => True'; + +# Task 2, Duplicate Zeros +pwc-test './ch-2.raku', |<1 0 2 3 0 4 5 0>, '1 0 0 2 3 0 0 4', 'Duplicate Zeros: (1, 0, 2, 3, 0, 4, 5, 0) => (1, 0, 0, 2, 3, 0, 0, 4)'; +pwc-test './ch-2.raku', |<1 2 3>, '1 2 3', 'Duplicate Zeros: (1, 2, 3) => (1, 2, 3)'; +pwc-test './ch-2.raku', |<0 3 0 4 5>, '0 0 3 0 0', 'Duplicate Zeros: (0, 3, 0, 4, 5) => (0, 0, 3, 0, 0)'; + +done-testing; -- cgit From 50ee9dd9832e336236b31f8b33237b4df38650c0 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 25 Sep 2023 17:19:02 +0800 Subject: challenge 236, raku solutions --- challenge-236/feng-chang/raku/ch-1.raku | 22 +++++++++++++++++++++ challenge-236/feng-chang/raku/ch-2.raku | 21 ++++++++++++++++++++ challenge-236/feng-chang/raku/test.raku | 35 +++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100755 challenge-236/feng-chang/raku/ch-1.raku create mode 100755 challenge-236/feng-chang/raku/ch-2.raku create mode 100755 challenge-236/feng-chang/raku/test.raku diff --git a/challenge-236/feng-chang/raku/ch-1.raku b/challenge-236/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..f48584cdf1 --- /dev/null +++ b/challenge-236/feng-chang/raku/ch-1.raku @@ -0,0 +1,22 @@ +#!/bin/env raku + +unit sub MAIN(*@bills); + +my method can-pay(UInt:D $bill : %change --> Bool:D) { + my $remain = $bill - 5; + return False if $remain < 0; + + while $remain > 0 { + my $bill_ = %change.keys.sort(-*).first(* ≤ $remain); + return False without $bill_; + + --%change{$bill_}; + $remain -= $bill_; + } + + ++%change{$bill}; + True +} + +my %change is BagHash; +put so @bills».&can-pay(%change).all; diff --git a/challenge-236/feng-chang/raku/ch-2.raku b/challenge-236/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..c2ede0b78b --- /dev/null +++ b/challenge-236/feng-chang/raku/ch-2.raku @@ -0,0 +1,21 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +my %remain is SetHash = |@ints; +my @loops; + +while %remain { + my @cache; + my $i = %remain.keys.min; + + repeat { + $i = @ints[$i]; + @cache.grep($i) ?? last() !! @cache.push($i); + } while True; + + @loops.push(@cache); + %remain.unset($_) for @cache; +} + +put +@loops; diff --git a/challenge-236/feng-chang/raku/test.raku b/challenge-236/feng-chang/raku/test.raku new file mode 100755 index 0000000000..719578eb67 --- /dev/null +++ b/challenge-236/feng-chang/raku/test.raku @@ -0,0 +1,35 @@ +#!/bin/env raku + +# The Weekly Challenge 236 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Exact Change +pwc-test './ch-1.raku', |<5 5 5 10 20>, 'True', 'Exact Change: (5, 5, 5, 10, 20) => True'; +pwc-test './ch-1.raku', |<5 5 10 10 20>, 'False', 'Exact Change: (5, 5, 10, 10, 20) => False'; +pwc-test './ch-1.raku', |<5 5 5 20>, 'True', 'Exact Change: (5, 5, 5, 20) => True'; + +# Task 2, Array Loops +pwc-test './ch-2.raku', + |<4 6 3 8 15 0 13 18 7 16 14 19 17 5 11 1 12 2 9 10>, + 3, + 'Array Loops: (4,6,3,8,15,0,13,18,7,16,14,19,17,5,11,1,12,2,9,10) => 3'; +pwc-test './ch-2.raku', + |<0 1 13 7 6 8 10 11 2 14 16 4 12 9 17 5 3 18 15 19>, + 6, + 'Array Loops: (0,1,13,7,6,8,10,11,2,14,16,4,12,9,17,5,3,18,15,19) => 6'; +pwc-test './ch-2.raku', + |<9 8 3 11 5 7 13 19 12 4 14 10 18 2 16 1 0 15 6 17>, + 1, + 'Array Loops: (9,8,3,11,5,7,13,19,12,4,14,10,18,2,16,1,0,15,6,17) => 1'; + +done-testing; -- cgit From c1f9c3a1309d813f5fc706cb6af21eb9cf6658ac Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 2 Oct 2023 22:54:51 +0800 Subject: fix --- challenge-237/feng-chang/raku/ch-1.raku | 10 ++++++++++ challenge-237/feng-chang/raku/ch-1a.raku | 5 +++++ challenge-237/feng-chang/raku/ch-2.raku | 5 +++++ challenge-237/feng-chang/raku/test.raku | 29 +++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+) create mode 100755 challenge-237/feng-chang/raku/ch-1.raku create mode 100755 challenge-237/feng-chang/raku/ch-1a.raku create mode 100755 challenge-237/feng-chang/raku/ch-2.raku create mode 100755 challenge-237/feng-chang/raku/test.raku diff --git a/challenge-237/feng-chang/raku/ch-1.raku b/challenge-237/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..3e4b04e828 --- /dev/null +++ b/challenge-237/feng-chang/raku/ch-1.raku @@ -0,0 +1,10 @@ +#!/bin/env raku + +unit sub MAIN(UInt:D $year, UInt:D $month, UInt:D $week-of-month, UInt:D $day-of-week); + +my $month_ = $month.fmt('%02d'); +my $dow01 = Date.new("{$year}-{$month_}-01").day-of-week; +my $target = 1 + ($day-of-week - $dow01 + 7) % 7 + 7 * ($week-of-month - 1); +put try { + Date.new("{$year}-{$month_}-{$target.fmt('%02d')}"); +} ?? $target !! 0; diff --git a/challenge-237/feng-chang/raku/ch-1a.raku b/challenge-237/feng-chang/raku/ch-1a.raku new file mode 100755 index 0000000000..018d31ccb4 --- /dev/null +++ b/challenge-237/feng-chang/raku/ch-1a.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(UInt:D $year, UInt:D $month, UInt:D $week-of-month, UInt:D $day-of-week); + +put (1..31).grep({ Date.new("{$year}-{$month.fmt('%02d')}-{.fmt('%02d')}").day-of-week == $day-of-week })[$week-of-month - 1] // 0; diff --git a/challenge-237/feng-chang/raku/ch-2.raku b/challenge-237/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..8279088ca3 --- /dev/null +++ b/challenge-237/feng-chang/raku/ch-2.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@nums); + +put @nums.permutations.map((@nums Z< *).sum).max; diff --git a/challenge-237/feng-chang/raku/test.raku b/challenge-237/feng-chang/raku/test.raku new file mode 100755 index 0000000000..dfa76c8be9 --- /dev/null +++ b/challenge-237/feng-chang/raku/test.raku @@ -0,0 +1,29 @@ +#!/bin/env raku + +# The Weekly Challenge 236 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Seize The Day +pwc-test './ch-1.raku', |<2024 4 3 2>, 16, 'Seize The Day: (2024, 4, 3, 2) => 16'; +pwc-test './ch-1.raku', |<2025 10 2 4>, 9, 'Seize The Day: (2025, 10, 2, 4) => 9'; +pwc-test './ch-1.raku', |<2026 8 5 3>, 0, 'Seize The Day: (2026, 8, 5, 3) => 0'; + +pwc-test './ch-1a.raku', |<2024 4 3 2>, 16, 'Seize The Day: (2024, 4, 3, 2) => 16'; +pwc-test './ch-1a.raku', |<2025 10 2 4>, 9, 'Seize The Day: (2025, 10, 2, 4) => 9'; +pwc-test './ch-1a.raku', |<2026 8 5 3>, 0, 'Seize The Day: (2026, 8, 5, 3) => 0'; + +# Task 2, Maximise Greatness +pwc-test './ch-2.raku', |<1 3 5 2 1 3 1>, 4, 'Maximise Greatness: (1, 3, 5, 2, 1, 3, 1) => 4'; +pwc-test './ch-2.raku', |<1 2 3 4>, 3, 'Maximise Greatness: (1, 2, 3, 4) => 3'; + +done-testing; -- cgit From 39dda85aa681328178935c4bc0c0fe87c9e63f60 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 10 Oct 2023 17:01:41 +0800 Subject: challenge 238, raku solutions --- challenge-238/feng-chang/raku/ch-1.raku | 5 +++++ challenge-238/feng-chang/raku/ch-2.raku | 17 +++++++++++++++++ challenge-238/feng-chang/raku/test.raku | 25 +++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100755 challenge-238/feng-chang/raku/ch-1.raku create mode 100755 challenge-238/feng-chang/raku/ch-2.raku create mode 100755 challenge-238/feng-chang/raku/test.raku diff --git a/challenge-238/feng-chang/raku/ch-1.raku b/challenge-238/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..41c368c763 --- /dev/null +++ b/challenge-238/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put [\+] @ints; diff --git a/challenge-238/feng-chang/raku/ch-2.raku b/challenge-238/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..06ff6b6961 --- /dev/null +++ b/challenge-238/feng-chang/raku/ch-2.raku @@ -0,0 +1,17 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put @ints.sort({ steps($_), $_ }); + +sub steps(UInt:D $n --> UInt:D) { + my $steps = 0; + my $m = $n; + + while $m.chars > 1 { + $m = [*] $m.comb; + ++$steps; + } + + $steps +} diff --git a/challenge-238/feng-chang/raku/test.raku b/challenge-238/feng-chang/raku/test.raku new file mode 100755 index 0000000000..8b3c0c2762 --- /dev/null +++ b/challenge-238/feng-chang/raku/test.raku @@ -0,0 +1,25 @@ +#!/bin/env raku + +# The Weekly Challenge 238 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Running Sum +pwc-test './ch-1.raku', |<1 2 3 4 5>, '1 3 6 10 15', 'Running Sum: (1, 2, 3, 4, 5) => (1, 3, 6, 10, 15)'; +pwc-test './ch-1.raku', |<1 1 1 1 1>, '1 2 3 4 5', 'Running Sum: (1, 1, 1, 1, 1) => (1, 2, 3, 4, 5)'; +pwc-test './ch-1.raku', |<0 -1 1 2>, '0 -1 0 2', 'Running Sum: (0, -1, 1, 2) => (0, -1, 0, 2)'; + +# Task 2, Persistence Sort +pwc-test './ch-2.raku', |<15 99 1 34>, '1 15 34 99', 'Persistence Sort: (15, 99, 1, 34) => (1, 15, 34, 99)'; +pwc-test './ch-2.raku', |<50 25 33 22>, '22 33 50 25', 'Persistence Sort: (50, 25, 33, 22) => (22, 33, 50, 25)'; + +done-testing; -- cgit From f1bd3bd0a86630b6d6446edc68ff5035980bec0f Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 16 Oct 2023 17:26:20 +0800 Subject: challenge 239, raku solutions --- challenge-239/feng-chang/raku/ch-1.raku | 8 ++++++++ challenge-239/feng-chang/raku/ch-2.raku | 6 ++++++ challenge-239/feng-chang/raku/test.raku | 29 +++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100755 challenge-239/feng-chang/raku/ch-1.raku create mode 100755 challenge-239/feng-chang/raku/ch-2.raku create mode 100755 challenge-239/feng-chang/raku/test.raku diff --git a/challenge-239/feng-chang/raku/ch-1.raku b/challenge-239/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..e31035cccc --- /dev/null +++ b/challenge-239/feng-chang/raku/ch-1.raku @@ -0,0 +1,8 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $s1, Str:D $s2); + +my @arr1 = $s1.words; +my @arr2 = $s2.words; + +put @arr1.join eq @arr2.join; diff --git a/challenge-239/feng-chang/raku/ch-2.raku b/challenge-239/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..968b279449 --- /dev/null +++ b/challenge-239/feng-chang/raku/ch-2.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +unit sub MAIN(*@strs); + +my %allowed = @strs.pop.comb.Set; +put +@strs.grep(*.comb.Set (<=) %allowed); diff --git a/challenge-239/feng-chang/raku/test.raku b/challenge-239/feng-chang/raku/test.raku new file mode 100755 index 0000000000..17f67ce8cb --- /dev/null +++ b/challenge-239/feng-chang/raku/test.raku @@ -0,0 +1,29 @@ +#!/bin/env raku + +# The Weekly Challenge 239 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Same String +pwc-test './ch-1.raku', 'ab c', 'a bc', 'True', 'Same String: "ab c", "a bc" => True'; +pwc-test './ch-1.raku', 'ab c', 'ac b', 'False', 'Same String: "ab c", "ac b" => False'; +pwc-test './ch-1.raku', 'ab cd e', 'abcde', 'True', 'Same String: "ab cd e", "abcde" => True'; + +# Task 2, Consistent Strings +pwc-test './ch-2.raku', |, 2, + 'Consistent Strings: @str = ("ad", "bd", "aaab", "baa", "badab"), $allowed = "ab" => 2'; +pwc-test './ch-2.raku', |, 7, + 'Consistent Strings: @str = ("a", "b", "c", "ab", "ac", "bc", "abc"), $allowed = "abc" => 7'; +pwc-test './ch-2.raku', |, 4, + 'Consistent Strings: @str = ("cc", "acd", "b", "ba", "bac", "bad", "ac", "d"), $allowed = "cad" => 4'; + +done-testing; -- cgit From 7fe999f4ae6a14b7f3497f06eaa936c6fcbe6436 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 23 Oct 2023 15:51:36 +0800 Subject: challenge 240, raku solutions --- challenge-240/feng-chang/raku/ch-1.raku | 6 ++++++ challenge-240/feng-chang/raku/ch-2.raku | 5 +++++ challenge-240/feng-chang/raku/test.raku | 25 +++++++++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100755 challenge-240/feng-chang/raku/ch-1.raku create mode 100755 challenge-240/feng-chang/raku/ch-2.raku create mode 100755 challenge-240/feng-chang/raku/test.raku diff --git a/challenge-240/feng-chang/raku/ch-1.raku b/challenge-240/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..3a261225cc --- /dev/null +++ b/challenge-240/feng-chang/raku/ch-1.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +unit sub MAIN(*@words); + +my $chk = @words.pop; +put $chk.lc eq @words.map(*.substr(0,1)).join.lc; diff --git a/challenge-240/feng-chang/raku/ch-2.raku b/challenge-240/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..cbf00739b8 --- /dev/null +++ b/challenge-240/feng-chang/raku/ch-2.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put (^+@ints).map({ @ints[@ints[$_]] }); diff --git a/challenge-240/feng-chang/raku/test.raku b/challenge-240/feng-chang/raku/test.raku new file mode 100755 index 0000000000..5d8682ecbc --- /dev/null +++ b/challenge-240/feng-chang/raku/test.raku @@ -0,0 +1,25 @@ +#!/bin/env raku + +# The Weekly Challenge 240 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Acronym +pwc-test './ch-1.raku', |, 'ppp', 'True', 'Acronym: @str = "Perl", "Python", "Pascal", $chk = "ppp" => True'; +pwc-test './ch-1.raku', |, 'rp', 'False', 'Acronym: @str = "Perl", "Raku", $chk = "rp" => False'; +pwc-test './ch-1.raku', |, 'oac', 'True', 'Acronym: @str = "Oracle", "Awk", "C", $chk = "oac" => True'; + +# Task 2, Build Array +pwc-test './ch-2.raku', |<0 2 1 5 3 4>, '0 1 2 4 5 3', 'Build Array: (0, 2, 1, 5, 3, 4) => "0 1 2 4 5 3"'; +pwc-test './ch-2.raku', |<5 0 1 2 3 4>, '4 5 0 1 2 3', 'Build Array: (5, 0, 1, 2, 3, 4) => "4 5 0 1 2 3"'; + +done-testing; -- cgit From 9831ad5b94643aec63e30e720b83dff7a5eac18b Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 13 Nov 2023 10:14:53 +0800 Subject: challenge 241, raku solutions --- challenge-241/feng-chang/raku/ch-1.raku | 7 +++++++ challenge-241/feng-chang/raku/ch-2.raku | 28 ++++++++++++++++++++++++++++ challenge-241/feng-chang/raku/test.raku | 23 +++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100755 challenge-241/feng-chang/raku/ch-1.raku create mode 100755 challenge-241/feng-chang/raku/ch-2.raku create mode 100755 challenge-241/feng-chang/raku/test.raku diff --git a/challenge-241/feng-chang/raku/ch-1.raku b/challenge-241/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..b31dbf97eb --- /dev/null +++ b/challenge-241/feng-chang/raku/ch-1.raku @@ -0,0 +1,7 @@ +#!/bin/env raku + +unit sub MAIN(*@ints where +* > 3); + +@ints = +«@ints; +my $diff = @ints.pop; +put +@ints.grep({ all($_ - $diff, $_ + $diff) (elem) @ints }); diff --git a/challenge-241/feng-chang/raku/ch-2.raku b/challenge-241/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..6648fa40d8 --- /dev/null +++ b/challenge-241/feng-chang/raku/ch-2.raku @@ -0,0 +1,28 @@ +#!/bin/env raku + +unit sub MAIN(*@ints where *.all > 1); + +sub prime-factors(UInt:D $n) { + my Int $m = $n; + my @factors; + my $cnt = 0; + + for (^Inf).grep: *.is-prime -> $p { + while ($m %% $p) { + @factors.push($p); + ++$cnt; + $m div= $p; + } + + last if $m < $p * $p; + } + + if $m > 1 { + @factors.push($m); + ++$cnt; + } + + $cnt, |@factors +} + +put @ints.sort({ prime-factors($_) }); diff --git a/challenge-241/feng-chang/raku/test.raku b/challenge-241/feng-chang/raku/test.raku new file mode 100755 index 0000000000..affec710c4 --- /dev/null +++ b/challenge-241/feng-chang/raku/test.raku @@ -0,0 +1,23 @@ +#!/bin/env raku + +# The Weekly Challenge 241 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Arithmetic Triplets +pwc-test './ch-1.raku', |<0 1 4 6 7 10>, 3, 2, 'Arithmetic Triplets: @nums = (0, 1, 4, 6, 7, 10), $diff = 3 => 2'; +pwc-test './ch-1.raku', |<4 5 6 7 8 9>, 2, 2, 'Arithmetic Triplets: @nums = (4, 5, 6, 7, 8, 9), $diff = 2 => 2'; + +# Task 2, Prime Order +pwc-test './ch-2.raku', |<11 8 27 4>, '11 4 8 27', 'Prime Order: (11, 8, 27, 4) => (11, 4, 8, 27)'; + +done-testing; -- cgit From e2baf4838aaf11472afeee14daf204689ef39b6b Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 13 Nov 2023 11:24:14 +0800 Subject: challenge 242, raku solutions --- challenge-242/feng-chang/raku/ch-1.raku | 8 ++++++++ challenge-242/feng-chang/raku/ch-2.raku | 11 ++++++++++ challenge-242/feng-chang/raku/data-1-1.txt | 2 ++ challenge-242/feng-chang/raku/data-1-2.txt | 2 ++ challenge-242/feng-chang/raku/data-2-1.txt | 3 +++ challenge-242/feng-chang/raku/data-2-2.txt | 4 ++++ challenge-242/feng-chang/raku/test.raku | 33 ++++++++++++++++++++++++++++++ 7 files changed, 63 insertions(+) create mode 100755 challenge-242/feng-chang/raku/ch-1.raku create mode 100755 challenge-242/feng-chang/raku/ch-2.raku create mode 100644 challenge-242/feng-chang/raku/data-1-1.txt create mode 100644 challenge-242/feng-chang/raku/data-1-2.txt create mode 100644 challenge-242/feng-chang/raku/data-2-1.txt create mode 100644 challenge-242/feng-chang/raku/data-2-2.txt create mode 100755 challenge-242/feng-chang/raku/test.raku diff --git a/challenge-242/feng-chang/raku/ch-1.raku b/challenge-242/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..e3cffb6752 --- /dev/null +++ b/challenge-242/feng-chang/raku/ch-1.raku @@ -0,0 +1,8 @@ +#!/bin/env raku + +unit sub MAIN(); + +my @arr1 = +«(prompt 'Array One: ').words; +my @arr2 = +«(prompt 'Array Two: ').words; + +put (@arr1 (-) @arr2).keys.sort.Array.gist, ' ', (@arr2 (-) @arr1).keys.sort.Array.gist; diff --git a/challenge-242/feng-chang/raku/ch-2.raku b/challenge-242/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..791c75f9e0 --- /dev/null +++ b/challenge-242/feng-chang/raku/ch-2.raku @@ -0,0 +1,11 @@ +#!/bin/env raku + +unit sub MAIN(); + +my (@M, $line-num); + +for $*IN.lines -> $line { + last unless $line; + @M[$line-num++] = (+«$line.words).map(1-*).reverse.Array; +} +put @M.gist; diff --git a/challenge-242/feng-chang/raku/data-1-1.txt b/challenge-242/feng-chang/raku/data-1-1.txt new file mode 100644 index 0000000000..7a192424a1 --- /dev/null +++ b/challenge-242/feng-chang/raku/data-1-1.txt @@ -0,0 +1,2 @@ +1 2 3 +2 4 6 diff --git a/challenge-242/feng-chang/raku/data-1-2.txt b/challenge-242/feng-chang/raku/data-1-2.txt new file mode 100644 index 0000000000..08e8253ace --- /dev/null +++ b/challenge-242/feng-chang/raku/data-1-2.txt @@ -0,0 +1,2 @@ +1 2 3 3 +1 1 2 2 diff --git a/challenge-242/feng-chang/raku/data-2-1.txt b/challenge-242/feng-chang/raku/data-2-1.txt new file mode 100644 index 0000000000..2bc6d2c8f5 --- /dev/null +++ b/challenge-242/feng-chang/raku/data-2-1.txt @@ -0,0 +1,3 @@ +1 1 0 +1 0 1 +0 0 0 diff --git a/challenge-242/feng-chang/raku/data-2-2.txt b/challenge-242/feng-chang/raku/data-2-2.txt new file mode 100644 index 0000000000..0b1909171d --- /dev/null +++ b/challenge-242/feng-chang/raku/data-2-2.txt @@ -0,0 +1,4 @@ +1 1 0 0 +1 0 0 1 +0 1 1 1 +1 0 1 0 diff --git a/challenge-242/feng-chang/raku/test.raku b/challenge-242/feng-chang/raku/test.raku new file mode 100755 index 0000000000..d3b52624cb --- /dev/null +++ b/challenge-242/feng-chang/raku/test.raku @@ -0,0 +1,33 @@ +#!/bin/env raku + +# The Weekly Challenge 242 +use Test; + +sub pwc-in-test(Str:D $script, Str:D $f where *.IO.e, $expect, $assertion, Bool :$deeply? = False) { + my $p = run $script, :in, :out; + $p.in.put($f.IO.slurp); + $p.in.close; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Missing Members +pwc-in-test './ch-1.raku', 'data-1-1.txt', + 'Array One: Array Two: [1 3] [4 6]', + 'Missing Members: @arr1 = (1, 2, 3), @arr2 = (2, 4, 6) => [1 3] [4 6]'; +pwc-in-test './ch-1.raku', 'data-1-2.txt', + 'Array One: Array Two: [3] []', + 'Missing Members: @arr1 = (1, 2, 3, 3), @arr2 = (1, 1, 2, 2) => [3] []'; + +# Task 2, Flip Matrix +pwc-in-test './ch-2.raku', 'data-2-1.txt', + '[[1 0 0] [0 1 0] [1 1 1]]', + 'Flip Matrix: [[1 1 0] [1 0 1] [0 0 0]] => [[1 0 0] [0 1 0] [1 1 1]]'; +pwc-in-test './ch-2.raku', 'data-2-2.txt', + '[[1 1 0 0] [0 1 1 0] [0 0 0 1] [1 0 1 0]]', + 'Flip Matrix: [[1 1 0 0] [1 0 0 1] [0 1 1 1] [1 0 1 0]] => [[1 1 0 0] [0 1 1 0] [0 0 0 1] [1 0 1 0]]'; + +done-testing; -- cgit From 35d79358f3d12607da66ffefefed5e93c469d396 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 13 Nov 2023 18:26:20 +0800 Subject: challenge 243, raku solutions --- challenge-243/feng-chang/raku/ch-1.raku | 5 +++++ challenge-243/feng-chang/raku/ch-2.raku | 6 ++++++ challenge-243/feng-chang/raku/test.raku | 24 ++++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100755 challenge-243/feng-chang/raku/ch-1.raku create mode 100755 challenge-243/feng-chang/raku/ch-2.raku create mode 100755 challenge-243/feng-chang/raku/test.raku diff --git a/challenge-243/feng-chang/raku/ch-1.raku b/challenge-243/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..dcd304dfce --- /dev/null +++ b/challenge-243/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@nums); + +put +(^+@nums).combinations(2).grep({ @nums[.[0]] > 2 * @nums[.[1]] }); diff --git a/challenge-243/feng-chang/raku/ch-2.raku b/challenge-243/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..96d1027171 --- /dev/null +++ b/challenge-243/feng-chang/raku/ch-2.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +unit sub MAIN(*@nums); + +my \N = +@nums; +put (^N X ^N).map({ floor(@nums[.[0]] / @nums[.[1]]) }).sum; diff --git a/challenge-243/feng-chang/raku/test.raku b/challenge-243/feng-chang/raku/test.raku new file mode 100755 index 0000000000..5f69216203 --- /dev/null +++ b/challenge-243/feng-chang/raku/test.raku @@ -0,0 +1,24 @@ +#!/bin/env raku + +# The Weekly Challenge 243 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Reverse Pairs +pwc-test './ch-1.raku', |<1 3 2 3 1>, 2, 'Reverse Pairs: @nums = (1, 3, 2, 3, 1) => 2'; +pwc-test './ch-1.raku', |<2 4 3 5 1>, 3, 'Reverse Pairs: @nums = (2, 4, 3, 5, 1) => 3'; + +# Task 2, Floor Sum +pwc-test './ch-2.raku', |<2 5 9>, 10, 'Floor Sum: (2, 5, 9) => 10'; +pwc-test './ch-2.raku', |<7 7 7 7 7 7 7>, 49, 'Floor Sum: (7, 7, 7, 7, 7, 7, 7) => 49'; + +done-testing; -- cgit From 88ab292bff28e87e712243e6e8c028e0eb1243bd Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 20 Nov 2023 16:42:55 +0800 Subject: challenge 244, raku solutions --- challenge-244/feng-chang/raku/ch-1.raku | 5 +++++ challenge-244/feng-chang/raku/ch-2.raku | 5 +++++ challenge-244/feng-chang/raku/test.raku | 24 ++++++++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100755 challenge-244/feng-chang/raku/ch-1.raku create mode 100755 challenge-244/feng-chang/raku/ch-2.raku create mode 100755 challenge-244/feng-chang/raku/test.raku diff --git a/challenge-244/feng-chang/raku/ch-1.raku b/challenge-244/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..f40b300083 --- /dev/null +++ b/challenge-244/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put @ints.map({ +@ints.grep(* < $_) }); diff --git a/challenge-244/feng-chang/raku/ch-2.raku b/challenge-244/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..ff9676ae26 --- /dev/null +++ b/challenge-244/feng-chang/raku/ch-2.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put @ints.combinations(1..Inf).map({ .max² * .min }).sum; diff --git a/challenge-244/feng-chang/raku/test.raku b/challenge-244/feng-chang/raku/test.raku new file mode 100755 index 0000000000..3426425b6b --- /dev/null +++ b/challenge-244/feng-chang/raku/test.raku @@ -0,0 +1,24 @@ +#!/bin/env raku + +# The Weekly Challenge 244 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Count Smaller +pwc-test './ch-1.raku', |<8 1 2 2 3>, '4 0 1 1 3', 'Count Smaller: @nums = (8, 1, 2, 2, 3) => (4, 0, 1, 1, 3)'; +pwc-test './ch-1.raku', |<6 5 4 8>, '2 1 0 3', 'Count Smaller: @nums = (6, 5, 4, 8) => (2, 1, 0, 3)'; +pwc-test './ch-1.raku', |<2 2 2>, '0 0 0', 'Count Smaller: @nums = (2, 2, 2) => (0, 0, 0)'; + +# Task 2, Group Hero +pwc-test './ch-2.raku', |<2 1 4>, 141, 'Group Hero: (2, 1, 4) => 141'; + +done-testing; -- cgit From 6f78aae3efa4642ffa271896203a09afce53e407 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 27 Nov 2023 16:29:57 +0800 Subject: challenge 245, raku solutions --- challenge-245/feng-chang/raku/ch-1.raku | 6 ++++++ challenge-245/feng-chang/raku/ch-2.raku | 5 +++++ challenge-245/feng-chang/raku/test.raku | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100755 challenge-245/feng-chang/raku/ch-1.raku create mode 100755 challenge-245/feng-chang/raku/ch-2.raku create mode 100755 challenge-245/feng-chang/raku/test.raku diff --git a/challenge-245/feng-chang/raku/ch-1.raku b/challenge-245/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..d12847286b --- /dev/null +++ b/challenge-245/feng-chang/raku/ch-1.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $langs, Str:D $popular); + +my %langs = $langs.words Z=> +«$popular.words; +put %langs.keys.sort({ %langs{$_} }); diff --git a/challenge-245/feng-chang/raku/ch-2.raku b/challenge-245/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..4cba0247de --- /dev/null +++ b/challenge-245/feng-chang/raku/ch-2.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints where @ints.all ≥ 0); + +put @ints.combinations.grep(*.join %% 3).map({ .permutations.map(*.join) }).flat.max || -1; diff --git a/challenge-245/feng-chang/raku/test.raku b/challenge-245/feng-chang/raku/test.raku new file mode 100755 index 0000000000..a14c97b30c --- /dev/null +++ b/challenge-245/feng-chang/raku/test.raku @@ -0,0 +1,33 @@ +#!/bin/env raku + +# The Weekly Challenge 245 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Sort Language +pwc-test './ch-1.raku', + 'perl c python', + '2 1 3', + 'c perl python', + 'Sort Language: @lang = ("perl", "c", "python"), @popularity = (2, 1, 3) => ("c", "perl", "python")'; +pwc-test './ch-1.raku', + 'c++ haskell java', + '1 3 2', + 'c++ java haskell', + 'Sort Language: @lang = ("c++", "haskell", "java"), @popularity = (1, 3, 2) => ("c++", "java", "haskell")'; + +# Task 2, Largest of Three +pwc-test './ch-2.raku', |<8 1 9>, 981, 'Largest of Three: (8, 1, 9) => 981'; +pwc-test './ch-2.raku', |<8 6 7 1 0>, 8760, 'Largest of Three: (8, 6, 7, 1, 0) => 8760'; +pwc-test './ch-2.raku', 1, -1, 'Largest of Three: (1) => -1'; + +done-testing; -- cgit From 4ac02978fd0732a7fcc61a9def95e1e08100e4c9 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 4 Dec 2023 15:43:12 +0800 Subject: challenge 246, raku solutions --- challenge-246/feng-chang/raku/ch-1.raku | 3 +++ challenge-246/feng-chang/raku/ch-2.raku | 8 ++++++++ challenge-246/feng-chang/raku/test.raku | 21 +++++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100755 challenge-246/feng-chang/raku/ch-1.raku create mode 100755 challenge-246/feng-chang/raku/ch-2.raku create mode 100755 challenge-246/feng-chang/raku/test.raku diff --git a/challenge-246/feng-chang/raku/ch-1.raku b/challenge-246/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..6e18559070 --- /dev/null +++ b/challenge-246/feng-chang/raku/ch-1.raku @@ -0,0 +1,3 @@ +#!/bin/env raku + +.put for (1..49).pick(6); diff --git a/challenge-246/feng-chang/raku/ch-2.raku b/challenge-246/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..90fef1869d --- /dev/null +++ b/challenge-246/feng-chang/raku/ch-2.raku @@ -0,0 +1,8 @@ +#!/bin/env raku + +unit sub MAIN(*@ints where +* == 5); + +my Rat \m = (@ints[2]² - @ints[1] * @ints[3]) / (@ints[0] * @ints[2] - @ints[1]²); +my Rat \q = (@ints[0] * @ints[3] - @ints[1] * @ints[2]) / (@ints[0] * @ints[2] - @ints[1]²); + +put m.Int == m && q.Int == q && @ints[4] == m * @ints[2] + q * @ints[3]; diff --git a/challenge-246/feng-chang/raku/test.raku b/challenge-246/feng-chang/raku/test.raku new file mode 100755 index 0000000000..961095cb1a --- /dev/null +++ b/challenge-246/feng-chang/raku/test.raku @@ -0,0 +1,21 @@ +#!/bin/env raku + +# The Weekly Challenge 246 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 2, Linear Recurrence of Second Order +pwc-test './ch-2.raku', |<1 1 2 3 5>, 'True', 'Linear Recurrence of Second Order: (1, 1, 2, 3, 5) => True'; +pwc-test './ch-2.raku', |<4 2 4 5 7>, 'False', 'Linear Recurrence of Second Order: (1, 1, 2, 3, 5) => False'; +pwc-test './ch-2.raku', |<4 1 2 -3 8>, 'True', 'Linear Recurrence of Second Order: (4, 1, 2, -3, 8) => True'; + +done-testing; -- cgit From fc3d89a0bc6fa1f2dde93826dcd2c76dc0896c4f Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 8 Jan 2024 16:34:03 +0800 Subject: challenge 247, raku solutions --- challenge-251/feng-chang/raku/ch-1.raku | 5 +++++ challenge-251/feng-chang/raku/ch-2.raku | 9 ++++++++ challenge-251/feng-chang/raku/test.raku | 39 +++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100755 challenge-251/feng-chang/raku/ch-1.raku create mode 100755 challenge-251/feng-chang/raku/ch-2.raku create mode 100755 challenge-251/feng-chang/raku/test.raku diff --git a/challenge-251/feng-chang/raku/ch-1.raku b/challenge-251/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..4e95e1ff9b --- /dev/null +++ b/challenge-251/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put [+] gather { take @ints.shift ~ (@ints.pop // '') while @ints }; diff --git a/challenge-251/feng-chang/raku/ch-2.raku b/challenge-251/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..f714985c6d --- /dev/null +++ b/challenge-251/feng-chang/raku/ch-2.raku @@ -0,0 +1,9 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $input); + +use MONKEY-SEE-NO-EVAL; +my @matrix; +EVAL "@matrix = $input"; + +put @matrix.map({ .min(:kv) }).first({ @matrix[*;.[0]].max == .[1] })[1] // -1; diff --git a/challenge-251/feng-chang/raku/test.raku b/challenge-251/feng-chang/raku/test.raku new file mode 100755 index 0000000000..81aa5efb5c --- /dev/null +++ b/challenge-251/feng-chang/raku/test.raku @@ -0,0 +1,39 @@ +#!/bin/env raku + +# The Weekly Challenge 251 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Concatenation Value +pwc-test './ch-1.raku', |<6 12 25 1>, 1286, 'Concatenation Value: (6, 12, 25, 1) => 1286'; +pwc-test './ch-1.raku', |<10 7 31 5 2 2>, 489, 'Concatenation Value: (10, 7, 31, 5, 2, 2) => 489'; +pwc-test './ch-1.raku', |<1 2 10>, 112, 'Concatenation Value: (1, 2, 10) => 112'; + +# Task 2, Lucky Numbers +pwc-test './ch-2.raku', + '[3, 7, 8], [9, 11, 13], [15, 16, 17]', + 15, + 'Lucky Numbers: [[3, 7, 8], [9, 11, 13], [15, 16, 17]] => 15'; +pwc-test './ch-2.raku', + '[1, 10, 4, 2], [9, 3, 8, 7], [15, 16, 17, 12]', + 12, + 'Lucky Numbers: [[1, 10, 4, 2], [9, 3, 8, 7], [15, 16, 17, 12]] => 12'; +pwc-test './ch-2.raku', + '[7, 8], [1, 2]', + 7, + 'Lucky Numbers: [[7, 8], [1, 2]] => 7'; +pwc-test './ch-2.raku', + '[1, 3], [4, 2]', + -1, + 'Lucky Numbers: [[1, 3], [4, 2]] => -1'; + +done-testing; -- cgit From 3d1e9e4d3b3cf63602a48b74c600affdc28953b5 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 8 Jan 2024 17:15:58 +0800 Subject: challenge 250, raku solutions --- challenge-250/feng-chang/raku/ch-1.raku | 5 +++++ challenge-250/feng-chang/raku/ch-2.raku | 5 +++++ challenge-250/feng-chang/raku/test.raku | 25 +++++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100755 challenge-250/feng-chang/raku/ch-1.raku create mode 100755 challenge-250/feng-chang/raku/ch-2.raku create mode 100755 challenge-250/feng-chang/raku/test.raku diff --git a/challenge-250/feng-chang/raku/ch-1.raku b/challenge-250/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..3a94c9f361 --- /dev/null +++ b/challenge-250/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +with @ints.pairs.map({ .key if .key % 10 == +.value }) { put +$_ ?? .min !! -1 }; diff --git a/challenge-250/feng-chang/raku/ch-2.raku b/challenge-250/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..40a946934c --- /dev/null +++ b/challenge-250/feng-chang/raku/ch-2.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@words); + +put @words.map({ m/^\d+$/ ?? +$_ !! .chars }).max; diff --git a/challenge-250/feng-chang/raku/test.raku b/challenge-250/feng-chang/raku/test.raku new file mode 100755 index 0000000000..f6e6835403 --- /dev/null +++ b/challenge-250/feng-chang/raku/test.raku @@ -0,0 +1,25 @@ +#!/bin/env raku + +# The Weekly Challenge 250 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Smallest Index +pwc-test './ch-1.raku', |<0 1 2>, 0, 'Smallest Index: (0, 1, 2) => 0'; +pwc-test './ch-1.raku', |<4 3 2 1>, 2, 'Smallest Index: (4, 3, 2, 1) => 2'; +pwc-test './ch-1.raku', |<1 2 3 4 5 6 7 8 9 0>, -1, 'Smallest Index: (1, 2, 3, 4, 5, 6, 7, 8, 9, 0) => -1'; + +# Task 2, Alphanumeric String Value +pwc-test './ch-2.raku', |, 6, 'Alphanumeric String Value: ("perl", "2", "000", "python", "r4ku") => 6'; +pwc-test './ch-2.raku', |<001 1 000 0001>, 1, 'Alphanumeric String Value: ("001", "1", "000", "0001") => 1'; + +done-testing; -- cgit From 4497a5f59bd9de56f576e49baf32528243699268 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Mon, 15 Jan 2024 18:13:46 +0800 Subject: challenge 252, raku solutions --- challenge-252/feng-chang/raku/ch-1.raku | 5 +++++ challenge-252/feng-chang/raku/ch-2.raku | 9 +++++++++ challenge-252/feng-chang/raku/test.raku | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100755 challenge-252/feng-chang/raku/ch-1.raku create mode 100755 challenge-252/feng-chang/raku/ch-2.raku create mode 100755 challenge-252/feng-chang/raku/test.raku diff --git a/challenge-252/feng-chang/raku/ch-1.raku b/challenge-252/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..39ced4a162 --- /dev/null +++ b/challenge-252/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +put @ints.pairs.map({ .value² if +@ints %% (.key + 1) }).sum; diff --git a/challenge-252/feng-chang/raku/ch-2.raku b/challenge-252/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..c6767855f5 --- /dev/null +++ b/challenge-252/feng-chang/raku/ch-2.raku @@ -0,0 +1,9 @@ +#!/bin/env raku + +unit sub MAIN($n where * > 0); + +put solve($n, 1).join(' '); + +multi solve(0, $) { () } +multi solve(1, $) { 0 } +multi solve($n, $i) { $i, -$i, |solve($n-2, $i+1) } diff --git a/challenge-252/feng-chang/raku/test.raku b/challenge-252/feng-chang/raku/test.raku new file mode 100755 index 0000000000..5df710a5b0 --- /dev/null +++ b/challenge-252/feng-chang/raku/test.raku @@ -0,0 +1,32 @@ +#!/bin/env raku + +# The Weekly Challenge 252 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Special Numbers +pwc-test './ch-1.raku', |<1 2 3 4>, 21, 'Special Numbers: (1, 2, 3, 4) => 21'; +pwc-test './ch-1.raku', |<2 7 1 19 18 3>, 63, 'Special Numbers: (2, 7, 1, 19, 18, 3) => 63'; + +sub pwc252-p2-test(Str:D $script, $n) { + my $p = run $script, $n, :out; + my @ints = +«$p.out.slurp(:close).chomp.words; + + ok (@ints.all ~~ Int and @ints.sum == 0 and +@ints.unique == +@ints), "$n => ({@ints.join(', ')})"; +} + +# Task 2, Unique Sum Zero +pwc252-p2-test './ch-2.raku', 5; +pwc252-p2-test './ch-2.raku', 3; +pwc252-p2-test './ch-2.raku', 1; + +done-testing; -- cgit From 116ef5347bad7190e88ed2e8d40097f8978645bf Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 16 Jan 2024 10:42:08 +0800 Subject: challenge 249, raku solutions --- challenge-249/feng-chang/raku/ch-1.raku | 10 ++++++++++ challenge-249/feng-chang/raku/ch-2.raku | 13 +++++++++++++ challenge-249/feng-chang/raku/test.raku | 25 +++++++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100755 challenge-249/feng-chang/raku/ch-1.raku create mode 100755 challenge-249/feng-chang/raku/ch-2.raku create mode 100755 challenge-249/feng-chang/raku/test.raku diff --git a/challenge-249/feng-chang/raku/ch-1.raku b/challenge-249/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..a04c99fa55 --- /dev/null +++ b/challenge-249/feng-chang/raku/ch-1.raku @@ -0,0 +1,10 @@ +#!/bin/env raku + +unit sub MAIN(*@ints); + +@ints = (+«@ints).sort; +if +@ints %% 2 and @ints.rotor(2).map({ .[0] == .[1] }).all { + put @ints.rotor(2).map({ "({.[0]}, {.[1]})" }).join(', '); +} else { + put '()'; +} diff --git a/challenge-249/feng-chang/raku/ch-2.raku b/challenge-249/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..c0b436a5f8 --- /dev/null +++ b/challenge-249/feng-chang/raku/ch-2.raku @@ -0,0 +1,13 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $s where *.comb.all eq 'D'|'I'); + +my @a = 0..$s.chars; +my @b = gather { + for $s.comb { + when 'D' { take @a.pop } + when 'I' { take @a.shift } + } + take @a[0]; +} +put '(', @b.join(', ') , ')'; diff --git a/challenge-249/feng-chang/raku/test.raku b/challenge-249/feng-chang/raku/test.raku new file mode 100755 index 0000000000..6ad7b4930d --- /dev/null +++ b/challenge-249/feng-chang/raku/test.raku @@ -0,0 +1,25 @@ +#!/bin/env raku + +# The Weekly Challenge 249 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Equal Pairs +pwc-test './ch-1.raku', |<3 2 3 2 2 2>, '(2, 2), (2, 2), (3, 3)', 'Equal Pairs: (3, 2, 3, 2, 2, 2) => (2, 2), (2, 2), (3, 3)'; +pwc-test './ch-1.raku', |<1 2 3 4>, '()', 'Equal Pairs: (1, 2, 3, 4) => ()'; + +# Task 2, DI String Match +pwc-test './ch-2.raku', 'IDID', '(0, 4, 1, 3, 2)', 'DI String Match: IDID => (0, 4, 1, 3, 2)'; +pwc-test './ch-2.raku', 'III', '(0, 1, 2, 3)', 'DI String Match: III => (0, 1, 2, 3)'; +pwc-test './ch-2.raku', 'DDI', '(3, 2, 0, 1)', 'DI String Match: DDI => (3, 2, 0, 1)'; + +done-testing; -- cgit From 9a9d34749e2ae074473a17d3c717bbf8157add89 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 16 Jan 2024 10:45:33 +0800 Subject: fix --- challenge-249/feng-chang/raku/ch-2.raku | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-249/feng-chang/raku/ch-2.raku b/challenge-249/feng-chang/raku/ch-2.raku index c0b436a5f8..5222f99897 100755 --- a/challenge-249/feng-chang/raku/ch-2.raku +++ b/challenge-249/feng-chang/raku/ch-2.raku @@ -1,6 +1,6 @@ #!/bin/env raku -unit sub MAIN(Str:D $s where *.comb.all eq 'D'|'I'); +unit sub MAIN(Str:D $s where *.comb.all eq .any); my @a = 0..$s.chars; my @b = gather { -- cgit From 8c4ac3f2dad1f1a186ae376589b74098cc219e16 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 16 Jan 2024 11:19:17 +0800 Subject: challenge 248, raku solutions --- challenge-248/feng-chang/raku/ch-1.raku | 10 +++++++++ challenge-248/feng-chang/raku/ch-2.raku | 15 ++++++++++++++ challenge-248/feng-chang/raku/test.raku | 36 +++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100755 challenge-248/feng-chang/raku/ch-1.raku create mode 100755 challenge-248/feng-chang/raku/ch-2.raku create mode 100755 challenge-248/feng-chang/raku/test.raku diff --git a/challenge-248/feng-chang/raku/ch-1.raku b/challenge-248/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..e925cf3210 --- /dev/null +++ b/challenge-248/feng-chang/raku/ch-1.raku @@ -0,0 +1,10 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $s, Str:D $c where { $c.chars == 1 and $s.index($c) }); + +my @indices = $s.index($c); +while my $i = $s.index($c, @indices.tail + 1) { + @indices.push($i); +} + +put '(', (^$s.chars).map({ (@indices »-» $_)».abs.min }).join(', '), ')'; diff --git a/challenge-248/feng-chang/raku/ch-2.raku b/challenge-248/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..e5e73575d8 --- /dev/null +++ b/challenge-248/feng-chang/raku/ch-2.raku @@ -0,0 +1,15 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $s); + +use MONKEY-SEE-NO-EVAL; +my @a; +EVAL '@a = ' ~ $s; + +my @b; +for ^(+@a - 1) -> $i { + for ^(+@a[0] - 1) -> $j { + @b[$i;$j] = @a[$i;$j] + @a[$i;$j+1] + @a[$i+1;$j] + @a[$i+1;$j+1]; + } +} +put @b.raku; diff --git a/challenge-248/feng-chang/raku/test.raku b/challenge-248/feng-chang/raku/test.raku new file mode 100755 index 0000000000..93e9a35af9 --- /dev/null +++ b/challenge-248/feng-chang/raku/test.raku @@ -0,0 +1,36 @@ +#!/bin/env raku + +# The Weekly Challenge 248 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Shortest Distance +pwc-test './ch-1.raku', + 'loveleetcode', 'e', + '(3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0)', + 'Shortest Distance: loveleetcode, e => (3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0)'; +pwc-test './ch-1.raku', + 'aaab', 'b', + '(3, 2, 1, 0)', + 'Shortest Distance: aaab, b => (3, 2, 1, 0)'; + +# Task 2, Submatrix Sum +pwc-test './ch-2.raku', + '[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]', + '[[14, 18, 22], [30, 34, 38]]', + 'Submatrix Sum: [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] => [[14, 18, 22], [30, 34, 38]]'; +pwc-test './ch-2.raku', + '[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]', + '[[2, 1, 0], [1, 2, 1], [0, 1, 2]]', + 'Submatrix Sum: [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]] => [[2, 1, 0], [1, 2, 1], [0, 1, 2]]'; + +done-testing; -- cgit From 34187d048c08cbbf3f3bf41770cd37921dbd39cf Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 16 Jan 2024 13:20:56 +0800 Subject: challenge 247, raku solutions --- challenge-247/feng-chang/raku/ch-1.raku | 11 +++++++++++ challenge-247/feng-chang/raku/ch-2.raku | 6 ++++++ challenge-247/feng-chang/raku/test.raku | 20 ++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100755 challenge-247/feng-chang/raku/ch-1.raku create mode 100755 challenge-247/feng-chang/raku/ch-2.raku create mode 100755 challenge-247/feng-chang/raku/test.raku diff --git a/challenge-247/feng-chang/raku/ch-1.raku b/challenge-247/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..bb82ac0754 --- /dev/null +++ b/challenge-247/feng-chang/raku/ch-1.raku @@ -0,0 +1,11 @@ +#!/bin/env raku + +unit sub MAIN(*@people); + +my %plan; +repeat { + %plan = @people Z=> @people.pick(*); +} until %plan.map({ family-name(.key) ne family-name(.value) }).all; +put "{.key.fmt('%-10s')} -> {.value}" for %plan; + +sub family-name(\name_) { name_.words.tail } diff --git a/challenge-247/feng-chang/raku/ch-2.raku b/challenge-247/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..facbb5867c --- /dev/null +++ b/challenge-247/feng-chang/raku/ch-2.raku @@ -0,0 +1,6 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $s); + +my %count = $s.comb.rotor(2 => -1).map(-> (\A,\B){ A~B if B.ord == A.ord + 1 }).Bag; +put %count.keys.sort({ -%count{$_}, $_ }).first; diff --git a/challenge-247/feng-chang/raku/test.raku b/challenge-247/feng-chang/raku/test.raku new file mode 100755 index 0000000000..94ad8695fc --- /dev/null +++ b/challenge-247/feng-chang/raku/test.raku @@ -0,0 +1,20 @@ +#!/bin/env raku + +# The Weekly Challenge 247 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 2, Most Frequent Letter Pair +pwc-test './ch-2.raku', 'abcdbca', 'bc', 'Most Frequent Letter Pair: abcdbca => bc'; +pwc-test './ch-2.raku', 'cdeabeabfcdfabgcd', 'ab', 'Most Frequent Letter Pair: cdeabeabfcdfabgcd => ab'; + +done-testing; -- cgit From b272c7f737b5969c4ce12783dc47a8d7a6af6574 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 23 Jan 2024 16:50:07 +0800 Subject: challenge 253, raku solutions --- challenge-253/feng-chang/raku/ch-1.raku | 5 +++++ challenge-253/feng-chang/raku/ch-2.raku | 9 +++++++++ challenge-253/feng-chang/raku/test.raku | 36 +++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+) create mode 100755 challenge-253/feng-chang/raku/ch-1.raku create mode 100755 challenge-253/feng-chang/raku/ch-2.raku create mode 100755 challenge-253/feng-chang/raku/test.raku diff --git a/challenge-253/feng-chang/raku/ch-1.raku b/challenge-253/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..dc4847bcd7 --- /dev/null +++ b/challenge-253/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN($sep, *@strings); + +put @strings».split($sep, :skip-empty).flat.grep(?*).join(' '); diff --git a/challenge-253/feng-chang/raku/ch-2.raku b/challenge-253/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..3b23e1f193 --- /dev/null +++ b/challenge-253/feng-chang/raku/ch-2.raku @@ -0,0 +1,9 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $s); + +use MONKEY-SEE-NO-EVAL; +my @matrix; +EVAL "@matrix = $s"; + +put @matrix.pairs.sort({ .value.sum, +.key })».key.join(', '); diff --git a/challenge-253/feng-chang/raku/test.raku b/challenge-253/feng-chang/raku/test.raku new file mode 100755 index 0000000000..5c2056ccef --- /dev/null +++ b/challenge-253/feng-chang/raku/test.raku @@ -0,0 +1,36 @@ +#!/bin/env raku + +# The Weekly Challenge 253 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Split Strings +pwc-test './ch-1.raku', + |<. one.two.three four.five six>, + 'one two three four five six', + 'Split Strings: @words = ("one.two.three", "four.five", "six"), $separator = "." => "one","two","three","four","five","six"'; +pwc-test './ch-1.raku', + |<$ $perl$$ $$raku$>, + 'perl raku', + 'Split Strings: @words = ("$perl$$", "$$raku$"), $separator = "$" => "perl","raku"'; + +# Task 2, Weakest Row +pwc-test './ch-2.raku', + '[1,1,0,0,0],[1,1,1,1,0],[1,0,0,0,0],[1,1,0,0,0],[1,1,1,1,1]', + '2, 0, 3, 1, 4', + 'Weakest Row: [[1,1,0,0,0],[1,1,1,1,0],[1,0,0,0,0],[1,1,0,0,0],[1,1,1,1,1]] => (2, 0, 3, 1, 4)'; +pwc-test './ch-2.raku', + '[1,0,0,0],[1,1,1,1],[1,0,0,0],[1,0,0,0]', + '0, 2, 3, 1', + 'Weakest Row: [[1,0,0,0],[1,1,1,1],[1,0,0,0],[1,0,0,0]] => (0, 2, 3, 1)'; + +done-testing; -- cgit From 409a0635fc8d10d342a7b6dd72c1c23a2c0702e0 Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 30 Jan 2024 10:01:49 +0800 Subject: challenge 254, raku solutions --- challenge-254/feng-chang/raku/ch-1.raku | 5 +++++ challenge-254/feng-chang/raku/ch-2.raku | 8 ++++++++ challenge-254/feng-chang/raku/test.raku | 27 +++++++++++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100755 challenge-254/feng-chang/raku/ch-1.raku create mode 100755 challenge-254/feng-chang/raku/ch-2.raku create mode 100755 challenge-254/feng-chang/raku/test.raku diff --git a/challenge-254/feng-chang/raku/ch-1.raku b/challenge-254/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..a0243f7c40 --- /dev/null +++ b/challenge-254/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(Int:D $n); + +put ($n**⅓ +0.5).Int³ == $n; diff --git a/challenge-254/feng-chang/raku/ch-2.raku b/challenge-254/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..2b0452548c --- /dev/null +++ b/challenge-254/feng-chang/raku/ch-2.raku @@ -0,0 +1,8 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $w); + +my @W = $w.lc.comb; +my @vowels = @W.grep(/<[aeiou]>/, :k); +@W[@vowels] .= reverse; +put @W.join.tc; diff --git a/challenge-254/feng-chang/raku/test.raku b/challenge-254/feng-chang/raku/test.raku new file mode 100755 index 0000000000..4fa27a474a --- /dev/null +++ b/challenge-254/feng-chang/raku/test.raku @@ -0,0 +1,27 @@ +#!/bin/env raku + +# The Weekly Challenge 254 +use Test; + +sub pwc-test(Str:D $script, Bool :$deeply? = False, *@input) { + my ($expect, $assertion) = @input.splice(*-2, 2); + my $p = run $script, |@input, :out; + if $deeply { + is-deeply $p.out.slurp(:close).chomp.words.Bag, $expect, $assertion; + } else { + is $p.out.slurp(:close).chomp, $expect, $assertion; + } +} + +# Task 1, Three Power +pwc-test './ch-1.raku', 27, 'True', '27 = 3³'; +pwc-test './ch-1.raku', 0, 'True', '0 = 0³'; +pwc-test './ch-1.raku', 6, 'False', '6 is not a power of 3'; + +# Task 2, Reverse Vowels +pwc-test './ch-2.raku', 'Raku', 'Ruka', 'Reverse Vowels: Raku => Ruka'; +pwc-test './ch-2.raku', 'Perl', 'Perl', 'Reverse Vowels: Perl => Perl'; +pwc-test './ch-2.raku', 'Julia', 'Jaliu', 'Reverse Vowels: Julia => Jaliu'; +pwc-test './ch-2.raku', 'Uiua', 'Auiu', 'Reverse Vowels: Uiua => Auiu'; + +done-testing; -- cgit From e5957b34dcceeec35cfab30af3dc01e4411c64ed Mon Sep 17 00:00:00 2001 From: 冯昶 Date: Tue, 6 Feb 2024 11:16:35 +0800 Subject: challenge 255, raku solutions --- challenge-255/feng-chang/raku/ch-1.raku | 5 +++++ challenge-255/feng-chang/raku/ch-2.raku | 7 +++++++ challenge-255/feng-chang/raku/test.raku | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) create mode 100755 challenge-255/feng-chang/raku/ch-1.raku create mode 100755 challenge-255/feng-chang/raku/ch-2.raku create mode 100755 challenge-255/feng-chang/raku/test.raku diff --git a/challenge-255/feng-chang/raku/ch-1.raku b/challenge-255/feng-chang/raku/ch-1.raku new file mode 100755 index 0000000000..e2e64ec169 --- /dev/null +++ b/challenge-255/feng-chang/raku/ch-1.raku @@ -0,0 +1,5 @@ +#!/bin/env raku + +unit sub MAIN(Str:D $s, Str:D $t); + +put ($t.comb.Bag (-) $s.comb.Bag).first.key; diff --git a/challenge-255/feng-chang/raku/ch-2.raku b/challenge-255/feng-chang/raku/ch-2.raku new file mode 100755 index 0000000000..0422ceadf8 --- /dev/null +++ b/