aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2024-03-04 17:11:00 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2024-03-04 17:11:00 +0000
commit93e897d94b55160397eff52df0d0b59f1b00a861 (patch)
tree3e633f461ce14aa21b0e3ed4d8bc046271e2c798
parent4f13579a82fca95fac5f46cd2d7a6227de16c614 (diff)
parent5554b0cb03ebcceaaaf2bc1c51af40527b19d15f (diff)
downloadperlweeklychallenge-club-93e897d94b55160397eff52df0d0b59f1b00a861.tar.gz
perlweeklychallenge-club-93e897d94b55160397eff52df0d0b59f1b00a861.tar.bz2
perlweeklychallenge-club-93e897d94b55160397eff52df0d0b59f1b00a861.zip
Merge remote-tracking branch 'origin/master'
-rwxr-xr-xchallenge-233/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-233/feng-chang/raku/ch-2.raku6
-rwxr-xr-xchallenge-233/feng-chang/raku/test.raku31
-rwxr-xr-xchallenge-234/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-234/feng-chang/raku/ch-2.raku6
-rwxr-xr-xchallenge-234/feng-chang/raku/test.raku35
-rwxr-xr-xchallenge-235/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-235/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-235/feng-chang/raku/test.raku26
-rwxr-xr-xchallenge-236/feng-chang/raku/ch-1.raku22
-rwxr-xr-xchallenge-236/feng-chang/raku/ch-2.raku21
-rwxr-xr-xchallenge-236/feng-chang/raku/test.raku35
-rwxr-xr-xchallenge-237/feng-chang/raku/ch-1.raku10
-rwxr-xr-xchallenge-237/feng-chang/raku/ch-1a.raku5
-rwxr-xr-xchallenge-237/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-237/feng-chang/raku/test.raku29
-rwxr-xr-xchallenge-238/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-238/feng-chang/raku/ch-2.raku17
-rwxr-xr-xchallenge-238/feng-chang/raku/test.raku25
-rwxr-xr-xchallenge-239/feng-chang/raku/ch-1.raku8
-rwxr-xr-xchallenge-239/feng-chang/raku/ch-2.raku6
-rwxr-xr-xchallenge-239/feng-chang/raku/test.raku29
-rwxr-xr-xchallenge-240/feng-chang/raku/ch-1.raku6
-rwxr-xr-xchallenge-240/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-240/feng-chang/raku/test.raku25
-rwxr-xr-xchallenge-241/feng-chang/raku/ch-1.raku7
-rwxr-xr-xchallenge-241/feng-chang/raku/ch-2.raku28
-rwxr-xr-xchallenge-241/feng-chang/raku/test.raku23
-rwxr-xr-xchallenge-242/feng-chang/raku/ch-1.raku8
-rwxr-xr-xchallenge-242/feng-chang/raku/ch-2.raku11
-rw-r--r--challenge-242/feng-chang/raku/data-1-1.txt2
-rw-r--r--challenge-242/feng-chang/raku/data-1-2.txt2
-rw-r--r--challenge-242/feng-chang/raku/data-2-1.txt3
-rw-r--r--challenge-242/feng-chang/raku/data-2-2.txt4
-rwxr-xr-xchallenge-242/feng-chang/raku/test.raku33
-rwxr-xr-xchallenge-243/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-243/feng-chang/raku/ch-2.raku6
-rwxr-xr-xchallenge-243/feng-chang/raku/test.raku24
-rwxr-xr-xchallenge-244/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-244/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-244/feng-chang/raku/test.raku24
-rwxr-xr-xchallenge-245/feng-chang/raku/ch-1.raku6
-rwxr-xr-xchallenge-245/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-245/feng-chang/raku/test.raku33
-rwxr-xr-xchallenge-246/feng-chang/raku/ch-1.raku3
-rwxr-xr-xchallenge-246/feng-chang/raku/ch-2.raku8
-rwxr-xr-xchallenge-246/feng-chang/raku/test.raku21
-rwxr-xr-xchallenge-247/feng-chang/raku/ch-1.raku11
-rwxr-xr-xchallenge-247/feng-chang/raku/ch-2.raku6
-rwxr-xr-xchallenge-247/feng-chang/raku/test.raku20
-rwxr-xr-xchallenge-248/feng-chang/raku/ch-1.raku10
-rwxr-xr-xchallenge-248/feng-chang/raku/ch-2.raku15
-rwxr-xr-xchallenge-248/feng-chang/raku/test.raku36
-rwxr-xr-xchallenge-249/feng-chang/raku/ch-1.raku10
-rwxr-xr-xchallenge-249/feng-chang/raku/ch-2.raku13
-rwxr-xr-xchallenge-249/feng-chang/raku/test.raku25
-rwxr-xr-xchallenge-250/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-250/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-250/feng-chang/raku/test.raku25
-rwxr-xr-xchallenge-251/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-251/feng-chang/raku/ch-2.raku9
-rwxr-xr-xchallenge-251/feng-chang/raku/test.raku39
-rwxr-xr-xchallenge-252/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-252/feng-chang/raku/ch-2.raku9
-rwxr-xr-xchallenge-252/feng-chang/raku/test.raku32
-rwxr-xr-xchallenge-253/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-253/feng-chang/raku/ch-2.raku9
-rwxr-xr-xchallenge-253/feng-chang/raku/test.raku36
-rwxr-xr-xchallenge-254/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-254/feng-chang/raku/ch-2.raku8
-rwxr-xr-xchallenge-254/feng-chang/raku/test.raku27
-rwxr-xr-xchallenge-255/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-255/feng-chang/raku/ch-2.raku7
-rwxr-xr-xchallenge-255/feng-chang/raku/test.raku33
-rwxr-xr-xchallenge-256/feng-chang/raku/ch-1.raku6
-rwxr-xr-xchallenge-256/feng-chang/raku/ch-2.raku5
-rwxr-xr-xchallenge-256/feng-chang/raku/test.raku24
-rwxr-xr-xchallenge-257/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-257/feng-chang/raku/ch-2.raku30
-rwxr-xr-xchallenge-257/feng-chang/raku/test.raku31
-rwxr-xr-xchallenge-258/feng-chang/raku/ch-1.raku5
-rwxr-xr-xchallenge-258/feng-chang/raku/ch-2.raku6
-rwxr-xr-xchallenge-258/feng-chang/raku/test.raku24
-rwxr-xr-xchallenge-259/feng-chang/raku/ch-1.raku16
-rwxr-xr-xchallenge-259/feng-chang/raku/ch-2.raku62
-rwxr-xr-xchallenge-259/feng-chang/raku/test.raku20
-rw-r--r--challenge-259/mark-anderson/raku/ch-1.raku25
87 files changed, 1317 insertions, 0 deletions
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..720a718cfb
--- /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 ≡ .[1].comb }).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 abcd bac aabc>,
+ "aba aabb\nbac aabc",
+ 'Similar Words: ("aba", "aabb", "abcd", "bac", "aabc") => "aba aabb\nbac aabc"';
+pwc-test
+ './ch-1.raku', |<aabb ab ba>,
+ "aabb ab\naabb ba\nab ba",
+ 'Similar Words: ("aabb", "ab", "ba") => "aabb ab\naabb ba\nab ba"';
+pwc-test
+ './ch-1.raku', |<nba cba dba>,
+ "",
+ '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;
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..c4c96ca5d6
--- /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({ .all == .one });
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', |<java javascript julia>,
+ 'j a'.words.Bag,
+ 'Common Characters: ("java", "javascript", "julia") => "j a"';
+pwc-test :deeply,
+ './ch-1.raku', |<bella label roller>,
+ 'e l l'.words.Bag,
+ 'Common Characters: ("bella", "label", "roller") => "e l l"';
+pwc-test :deeply,
+ './ch-1.raku', |<cool lock cook>,
+ '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;
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;
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;
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