aboutsummaryrefslogtreecommitdiff
path: root/challenge-196
diff options
context:
space:
mode:
Diffstat (limited to 'challenge-196')
-rw-r--r--challenge-196/polettix/blog.txt1
-rw-r--r--challenge-196/polettix/blog1.txt1
-rw-r--r--challenge-196/polettix/perl/ch-1.pl21
-rw-r--r--challenge-196/polettix/perl/ch-2.pl24
-rw-r--r--challenge-196/polettix/raku/ch-1.raku19
-rw-r--r--challenge-196/polettix/raku/ch-2.raku19
6 files changed, 85 insertions, 0 deletions
diff --git a/challenge-196/polettix/blog.txt b/challenge-196/polettix/blog.txt
new file mode 100644
index 0000000000..57f2569f1c
--- /dev/null
+++ b/challenge-196/polettix/blog.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2022/12/22/pwc196-pattern-132
diff --git a/challenge-196/polettix/blog1.txt b/challenge-196/polettix/blog1.txt
new file mode 100644
index 0000000000..89ba6448bb
--- /dev/null
+++ b/challenge-196/polettix/blog1.txt
@@ -0,0 +1 @@
+https://github.polettix.it/ETOOBUSY/2022/12/23/pwc196-range-list
diff --git a/challenge-196/polettix/perl/ch-1.pl b/challenge-196/polettix/perl/ch-1.pl
new file mode 100644
index 0000000000..dd27f409a3
--- /dev/null
+++ b/challenge-196/polettix/perl/ch-1.pl
@@ -0,0 +1,21 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+my @result = first_pattern132(@ARGV ? @ARGV : (3, 1, 4, 2));
+say "(@result)";
+
+sub first_pattern132 (@list) {
+ for my $low (0 .. (@list - 3)) {
+ for my $high ($low + 1 .. (@list - 2)) {
+ next if $list[$high] <= $list[$low] - 1;
+ for my $mid ($high + 1 .. (@list - 1)) {
+ return @list[$low, $high, $mid]
+ if $list[$low] < $list[$mid] && $list[$mid] < $list[$high];
+ }
+ }
+ }
+ return;
+}
diff --git a/challenge-196/polettix/perl/ch-2.pl b/challenge-196/polettix/perl/ch-2.pl
new file mode 100644
index 0000000000..3738a1ca54
--- /dev/null
+++ b/challenge-196/polettix/perl/ch-2.pl
@@ -0,0 +1,24 @@
+#!/usr/bin/env perl
+use v5.24;
+use warnings;
+use experimental 'signatures';
+no warnings 'experimental::signatures';
+
+say join ', ',
+ map { '[' . join(',', $_->@*) . ']'}
+ range_list(@ARGV ? @ARGV : (1, 3, 4, 5, 7));
+
+sub range_list (@array) {
+ my @retval;
+ for my $v (@array) {
+ if (@retval && $retval[-1][1] == $v - 1) {
+ $retval[-1][1] = $v;
+ }
+ else {
+ pop @retval if @retval && $retval[-1][0] == $retval[-1][1];
+ push @retval, [$v, $v];
+ }
+ }
+ pop @retval if @retval && $retval[-1][0] == $retval[-1][1];
+ return @retval;
+}
diff --git a/challenge-196/polettix/raku/ch-1.raku b/challenge-196/polettix/raku/ch-1.raku
new file mode 100644
index 0000000000..adebf1fe40
--- /dev/null
+++ b/challenge-196/polettix/raku/ch-1.raku
@@ -0,0 +1,19 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (*@args is copy) {
+ @args = 3, 1, 4, 2 unless @args;
+ say first-pattern132(@args);
+}
+
+sub first-pattern132 (@list) {
+ for 0 .. (@list - 3) -> $low {
+ for $low + 1 .. (@list - 2) -> $high {
+ next if @list[$high] <= @list[$low] - 1;
+ for $high + 1 ..^ @list -> $mid {
+ return @list[$low, $high, $mid]
+ if @list[$low] < @list[$mid] < @list[$high];
+ }
+ }
+ }
+ return ();
+}
diff --git a/challenge-196/polettix/raku/ch-2.raku b/challenge-196/polettix/raku/ch-2.raku
new file mode 100644
index 0000000000..425821b6df
--- /dev/null
+++ b/challenge-196/polettix/raku/ch-2.raku
@@ -0,0 +1,19 @@
+#!/usr/bin/env raku
+use v6;
+sub MAIN (*@args) { say range-list(@args) }
+
+sub range-list (@array) {
+ gather {
+ my ($begin, $end);
+ for @array -> $v {
+ if defined($end) && $end == $v - 1 {
+ $end = $v;
+ }
+ else {
+ take [$begin, $end] if defined($begin) && $begin < $end;
+ $begin = $end = $v;
+ }
+ }
+ take [$begin, $end] if defined($begin) && $begin < $end;
+ }
+}