diff options
| -rw-r--r-- | challenge-215/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-215/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-215/polettix/perl/ch-1.pl | 16 | ||||
| -rw-r--r-- | challenge-215/polettix/perl/ch-2.pl | 30 | ||||
| -rw-r--r-- | challenge-215/polettix/raku/ch-1.raku | 11 | ||||
| -rw-r--r-- | challenge-215/polettix/raku/ch-2.raku | 31 |
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; +} |
