diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2023-04-17 00:53:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-17 00:53:52 +0100 |
| commit | 89712fdd68ab38b3644a3a476f15868435c3ddd4 (patch) | |
| tree | 51c1d848126343f01dca7b79278d87982c2a1ac1 | |
| parent | 66dc5fad86c7eafb5ef4860e68457ca19d772b1c (diff) | |
| parent | 85f44e291bf5c2f1676e5e0e041a60e1aa963411 (diff) | |
| download | perlweeklychallenge-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.pl | 49 |
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; + |
