diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-12-28 09:18:06 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-28 09:18:06 +0000 |
| commit | a685801323c6d8c9bf832077e96fdb778b85edb1 (patch) | |
| tree | abcd5037dedd82d6c14d1620027ded14f84a8876 | |
| parent | a74c0126fc8ba1530dff44dee4bfe92f8c547ec0 (diff) | |
| parent | 2205edd9cc138a558d3bfed4023a6c7e3847a2a1 (diff) | |
| download | perlweeklychallenge-club-a685801323c6d8c9bf832077e96fdb778b85edb1.tar.gz perlweeklychallenge-club-a685801323c6d8c9bf832077e96fdb778b85edb1.tar.bz2 perlweeklychallenge-club-a685801323c6d8c9bf832077e96fdb778b85edb1.zip | |
Merge pull request #7322 from polettix/polettix/pwc197
Add polettix's solution to challenge-197
| -rw-r--r-- | challenge-197/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-197/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-197/polettix/perl/ch-1.pl | 23 | ||||
| -rw-r--r-- | challenge-197/polettix/perl/ch-2.pl | 14 | ||||
| -rw-r--r-- | challenge-197/polettix/raku/ch-1.raku | 20 | ||||
| -rw-r--r-- | challenge-197/polettix/raku/ch-2.raku | 15 |
6 files changed, 74 insertions, 0 deletions
diff --git a/challenge-197/polettix/blog.txt b/challenge-197/polettix/blog.txt new file mode 100644 index 0000000000..bdf659f7c5 --- /dev/null +++ b/challenge-197/polettix/blog.txt @@ -0,0 +1 @@ +https://etoobusy.polettix.it/2022/12/29/pwc197-move-zero/ diff --git a/challenge-197/polettix/blog1.txt b/challenge-197/polettix/blog1.txt new file mode 100644 index 0000000000..1d7858e239 --- /dev/null +++ b/challenge-197/polettix/blog1.txt @@ -0,0 +1 @@ +https://etoobusy.polettix.it/2022/12/30/pwc197-wiggle-sort/ diff --git a/challenge-197/polettix/perl/ch-1.pl b/challenge-197/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..cd5085d8e7 --- /dev/null +++ b/challenge-197/polettix/perl/ch-1.pl @@ -0,0 +1,23 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +@ARGV = qw< 1 0 3 0 0 5 > unless @ARGV; +move_zero_in_place(\@ARGV); +{ local $" = ', '; say "(@ARGV)" } + +sub move_zero_in_place ($list) { + my $i = 0; + my $n_zeros = 0; + while ($i < $list->@*) { + if ($list->[$i] == 0) { + ++$n_zeros; + splice $list->@*, $i, 1; + } + else { ++$i } + } + push $list->@*, (0) x $n_zeros; + return $list; +} diff --git a/challenge-197/polettix/perl/ch-2.pl b/challenge-197/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..754fa9e403 --- /dev/null +++ b/challenge-197/polettix/perl/ch-2.pl @@ -0,0 +1,14 @@ +#!/usr/bin/env perl +use v5.24; +use warnings; +use experimental 'signatures'; +no warnings 'experimental::signatures'; + +my @wiggled = wiggle_sort_sloppy(@ARGV ? @ARGV : (1, 5, 1, 1, 6, 4)); +{local $" = ','; say "(@wiggled)"} + +sub wiggle_sort_sloppy (@list) { + @list = sort { $a <=> $b } @list; + my @upper = splice @list, int((@list + 1) / 2); + map { $_, (@upper ? shift(@upper) : ()) } @list; +} diff --git a/challenge-197/polettix/raku/ch-1.raku b/challenge-197/polettix/raku/ch-1.raku new file mode 100644 index 0000000000..a2512446b9 --- /dev/null +++ b/challenge-197/polettix/raku/ch-1.raku @@ -0,0 +1,20 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (*@args) { + @args = <1 0 3 0 0 5>ยป.Int unless @args; + put '(', move-zero-in-place(@args).join(', '), ')'; +} + +sub move-zero-in-place (@list) { + my $i = 0; + my $n-zeros = 0; + while $i < @list { + if @list[$i] == 0 { + ++$n-zeros; + @list.splice($i, 1); + } + else { ++$i } + } + @list.push: |(0 xx $n-zeros); + return @list; +} diff --git a/challenge-197/polettix/raku/ch-2.raku b/challenge-197/polettix/raku/ch-2.raku new file mode 100644 index 0000000000..3614121a1e --- /dev/null +++ b/challenge-197/polettix/raku/ch-2.raku @@ -0,0 +1,15 @@ +#!/usr/bin/env raku +use v6; +sub MAIN (*@args) { + @args = 1, 5, 1, 1, 6, 4 unless @args; + put '(', wiggle-sort-sloppy(@args).join(','), ')'; +} + +sub wiggle-sort-sloppy (@list) { + my @ordered = @list.sort: { $^a <=> $^b }; + my $halfway = (@ordered + 1) div 2; + gather for ^$halfway { + take @ordered[$_]; + take @ordered[$_ + $halfway] if $_ + $halfway < @ordered; + } +} |
