aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-215/polettix/blog.txt1
-rw-r--r--challenge-215/polettix/blog1.txt1
-rw-r--r--challenge-215/polettix/perl/ch-1.pl16
-rw-r--r--challenge-215/polettix/perl/ch-2.pl30
-rw-r--r--challenge-215/polettix/raku/ch-1.raku11
-rw-r--r--challenge-215/polettix/raku/ch-2.raku31
6 files changed, 90 insertions, 0 deletions
diff --git a/challenge-215/polettix/blog.txt b/challenge-215/polettix/blog.txt
new file mode 100644
index 0000000000..11868f1936
--- /dev/null
+++ b/challenge-215/polettix/blog.txt
@@ -0,0 +1 @@
+https://etoobusy.polettix.it/2023/05/04/pwc215-odd-one-out/
diff --git a/challenge-215/polettix/blog1.txt b/challenge-215/polettix/blog1.txt
new file mode 100644
index 0000000000..2e5abab448
--- /dev/null
+++ b/challenge-215/polettix/blog1.txt
@@ -0,0 +1 @@
+https://etoobusy.polettix.it/2023/05/05/pwc215-number-placement/
diff --git a/challenge-215/polettix/perl/ch-1.pl b/challenge-215/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..c8a2dc576d
--- /dev/null
+++ b/challenge-215/polettix/perl/ch-1.pl
@@ -0,0 +1,16 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+
+say count_odd_one_out(@ARGV ? @ARGV : qw< abc xyz def >);
+
+sub count_odd_one_out (@words) {
+ my $sum = 0;
+ my $i = 0;
+ for my $j (1 .. $#words) {
+ if ($words[$i] le $words[$j]) { $i = $j }
+ else { ++$sum }
+ }
+ return $sum;
+}
diff --git a/challenge-215/polettix/perl/ch-2.pl b/challenge-215/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..9c8a8c137f
--- /dev/null
+++ b/challenge-215/polettix/perl/ch-2.pl
@@ -0,0 +1,30 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+use List::Util 'sum';
+
+my @args = map { split m{[\s,]*}mxs } @ARGV;
+@args = (1, 1, 0, 0, 0, 1) unless @args;
+say number_placement_sequential(@args);
+say number_placement_parallel(@args);
+
+sub number_placement_sequential ($count, @numbers) {
+ my $av = sum map { int(($_ - 1) / 2) } zero_streaks_counts(@numbers);
+ return $count <= ($av // 0) ? 1 : 0;
+}
+
+sub number_placement_parallel ($count, @numbers) {
+ my $av = sum map { $_ > 1 ? $_ - 2 : 0 } zero_streaks_counts(@numbers);
+ return $count <= $av ? 1 : 0;
+}
+
+sub zero_streaks_counts (@numbers) {
+ my @retval = (0);
+ for my $n (@numbers) {
+ if ($n) { push @retval, 0 if $retval[-1] }
+ else { $retval[-1]++ }
+ }
+ pop @retval while @retval && $retval[-1] == 0;
+ return @retval;
+}
diff --git a/challenge-215/polettix/raku/ch-1.raku b/challenge-215/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..455f8133c4
--- /dev/null
+++ b/challenge-215/polettix/raku/ch-1.raku
@@ -0,0 +1,11 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (*@args) { put count-odd-one-out(@args) }
+
+sub count-odd-one-out (@words) {
+ my $i = 0;
+ return sum gather for ^@words {
+ if @words[$i] le @words[$_] { $i = $_ }
+ else { take 1 }
+ }
+}
diff --git a/challenge-215/polettix/raku/ch-2.raku b/challenge-215/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..8e98ba4e2b
--- /dev/null
+++ b/challenge-215/polettix/raku/ch-2.raku
@@ -0,0 +1,31 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (*@args) {
+ my $count = @args.shift;
+ put number-placement-sequential(@args, $count);
+ put number-placement-parallel(@args, $count);
+}
+
+sub number-placement-sequential (@numbers, $count) {
+ my $av = zero-streaks-count(@numbers)
+ .map({ (($_ - 1) / 2).Int })
+ .sum;
+ return $count <= $av ?? 1 !! 0;
+}
+
+sub number-placement-parallel (@numbers, $count) {
+ my $av = zero-streaks-count(@numbers)
+ .map({ $_ > 1 ?? $_ - 2 !! 0 })
+ .sum;
+ return $count <= $av ?? 1 !! 0;
+}
+
+sub zero-streaks-count (@numbers) {
+ my @retval = 0,;
+ for @numbers -> $n {
+ if $n.Int { @retval.push: 0 if @retval[*-1] }
+ else { @retval[*-1]++ }
+ }
+ @retval.pop while @retval && @retval[*-1] == 0;
+ return @retval;
+}