aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-12-28 09:18:06 +0000
committerGitHub <noreply@github.com>2022-12-28 09:18:06 +0000
commita685801323c6d8c9bf832077e96fdb778b85edb1 (patch)
treeabcd5037dedd82d6c14d1620027ded14f84a8876
parenta74c0126fc8ba1530dff44dee4bfe92f8c547ec0 (diff)
parent2205edd9cc138a558d3bfed4023a6c7e3847a2a1 (diff)
downloadperlweeklychallenge-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.txt1
-rw-r--r--challenge-197/polettix/blog1.txt1
-rw-r--r--challenge-197/polettix/perl/ch-1.pl23
-rw-r--r--challenge-197/polettix/perl/ch-2.pl14
-rw-r--r--challenge-197/polettix/raku/ch-1.raku20
-rw-r--r--challenge-197/polettix/raku/ch-2.raku15
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;
+ }
+}