aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2023-04-17 00:53:52 +0100
committerGitHub <noreply@github.com>2023-04-17 00:53:52 +0100
commit89712fdd68ab38b3644a3a476f15868435c3ddd4 (patch)
tree51c1d848126343f01dca7b79278d87982c2a1ac1
parent66dc5fad86c7eafb5ef4860e68457ca19d772b1c (diff)
parent85f44e291bf5c2f1676e5e0e041a60e1aa963411 (diff)
downloadperlweeklychallenge-club-89712fdd68ab38b3644a3a476f15868435c3ddd4.tar.gz
perlweeklychallenge-club-89712fdd68ab38b3644a3a476f15868435c3ddd4.tar.bz2
perlweeklychallenge-club-89712fdd68ab38b3644a3a476f15868435c3ddd4.zip
Merge pull request #7919 from E7-87-83/newt
Week 212 Task 2
-rw-r--r--challenge-212/cheok-yin-fung/perl/ch-2.pl49
1 files changed, 49 insertions, 0 deletions
diff --git a/challenge-212/cheok-yin-fung/perl/ch-2.pl b/challenge-212/cheok-yin-fung/perl/ch-2.pl
new file mode 100644
index 0000000000..626d849f87
--- /dev/null
+++ b/challenge-212/cheok-yin-fung/perl/ch-2.pl
@@ -0,0 +1,49 @@
+# The Weekly Challenge 212
+# Task 2 Rearrange Groups
+use v5.30.0;
+use warnings;
+use List::Util qw/min all/;
+use List::MoreUtils qw/frequency/;
+use Data::Printer;
+
+sub rg {
+ my @list = $_[0]->@*;
+ my $size = $_[1];
+ my @result = ();
+ while (scalar @list != 0) {
+ my %freq = frequency @list;
+ my $m = min @list;
+ return -1 if !(all {defined($freq{$m+$_}) && $freq{$m+$_} >= $freq{$m}} 1..$size-1);
+ push @result, [ $m..$m+$size-1 ] for 1..$freq{$m};
+ my $first_pop = $freq{$m};
+ for my $k (0..$size-1) {
+ $freq{$m+$k} -= $first_pop;
+ }
+ @list = ();
+ for my $key (keys %freq) {
+ push @list, $key for 1..$freq{$key};
+ }
+ }
+ return @result;
+}
+
+my @r;
+say "Example 1";
+@r = rg([1,2,3,5,1,2,7,6,3], 3);
+p @r;
+say "Example 2";
+@r = rg([1,2,3], 2);
+p @r;
+say "Example 3";
+@r = rg([1,2,4,3,5,3], 3);
+p @r;
+say "Example 4";
+@r = rg([1,5,2,6,4,7], 3);
+p @r;
+say "modified Example 4";
+@r = rg([1,5,2,6,4,7], 2);
+p @r;
+say "Test";
+@r = rg([1,2,2,3,3,4], 3);
+p @r;
+