diff options
Diffstat (limited to 'challenge-196')
| -rw-r--r-- | challenge-196/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-196/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-196/polettix/perl/ch-1.pl | 21 | ||||
| -rw-r--r-- | challenge-196/polettix/perl/ch-2.pl | 24 | ||||
| -rw-r--r-- | challenge-196/polettix/raku/ch-1.raku | 19 | ||||
| -rw-r--r-- | challenge-196/polettix/raku/ch-2.raku | 19 |
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; + } +} |
