From f239fe6bd297ab1822019cc046edaf13cdea0f4a Mon Sep 17 00:00:00 2001 From: arnesom Date: Sat, 25 Sep 2021 22:24:35 +0200 Subject: Arne Sommer --- challenge-131/arne-sommer/blog.txt | 1 + challenge-131/arne-sommer/perl/ch-1.pl | 44 ++++++++++++++++++++++++++ challenge-131/arne-sommer/perl/ch-2.pl | 41 ++++++++++++++++++++++++ challenge-131/arne-sommer/perl/coar-perl | 44 ++++++++++++++++++++++++++ challenge-131/arne-sommer/perl/find-pairs-perl | 41 ++++++++++++++++++++++++ challenge-131/arne-sommer/raku/ch-1.raku | 38 ++++++++++++++++++++++ challenge-131/arne-sommer/raku/ch-2.raku | 25 +++++++++++++++ challenge-131/arne-sommer/raku/coar | 37 ++++++++++++++++++++++ challenge-131/arne-sommer/raku/coar-fixed | 38 ++++++++++++++++++++++ challenge-131/arne-sommer/raku/find-pairs | 25 +++++++++++++++ 10 files changed, 334 insertions(+) create mode 100644 challenge-131/arne-sommer/blog.txt create mode 100755 challenge-131/arne-sommer/perl/ch-1.pl create mode 100755 challenge-131/arne-sommer/perl/ch-2.pl create mode 100755 challenge-131/arne-sommer/perl/coar-perl create mode 100755 challenge-131/arne-sommer/perl/find-pairs-perl create mode 100755 challenge-131/arne-sommer/raku/ch-1.raku create mode 100755 challenge-131/arne-sommer/raku/ch-2.raku create mode 100755 challenge-131/arne-sommer/raku/coar create mode 100755 challenge-131/arne-sommer/raku/coar-fixed create mode 100755 challenge-131/arne-sommer/raku/find-pairs diff --git a/challenge-131/arne-sommer/blog.txt b/challenge-131/arne-sommer/blog.txt new file mode 100644 index 0000000000..0cd1fb5f5d --- /dev/null +++ b/challenge-131/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/con-se-pair.html diff --git a/challenge-131/arne-sommer/perl/ch-1.pl b/challenge-131/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..fdd84bae37 --- /dev/null +++ b/challenge-131/arne-sommer/perl/ch-1.pl @@ -0,0 +1,44 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +use Getopt::Long; +use Perl6::Junction 'all'; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +die "Integers only" unless all(@ARGV) == qr/^\d+$/; + +my @result; + +my $current = shift(@ARGV) // die "No numbers"; +my @current = ($current); + +say ": Candidate: $current" if $verbose; + +for my $i (@ARGV) +{ + if ($i > $current +1) + { + my @copy = @current; + push(@result, \@copy); + say ": Push: [", join(",", @current), "]" if $verbose; + @current = (); + } + + die "Not sorted ($current < $i)" unless $i > $current; + + say ": Candidate: $i" if $verbose; + + push(@current, $i); + $current = $i; +} + +push(@result, \@current) if @current; + +say "(", join(", ", map { "[" . join(", ", @$_) . "]" } @result), ")"; + diff --git a/challenge-131/arne-sommer/perl/ch-2.pl b/challenge-131/arne-sommer/perl/ch-2.pl new file mode 100755 index 0000000000..e5d25114a9 --- /dev/null +++ b/challenge-131/arne-sommer/perl/ch-2.pl @@ -0,0 +1,41 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +use Getopt::Long; +use Perl6::Junction 'any'; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $pairs = shift(@ARGV) // '""[]()'; +my $search = shift(@ARGV) // '"I like (parens) and the Apple ][+" they said.'; + +my @pairs = split(//, $pairs); +my @search = split(//, $search); + +my @open; +my @close; + +for my $index (0 .. @pairs -1) +{ + $index % 2 ? push(@open, $pairs[$index]) : push(@close, $pairs[$index]); +} + +say ": Open: @open" if $verbose; +say ": Close @close" if $verbose; + +my $open = ""; +my $close = ""; + +for my $char (@search) +{ + $open .= $char if any(@open) eq $char; + $close .= $char if any(@close) eq $char; +} + +say $open; +say $close; diff --git a/challenge-131/arne-sommer/perl/coar-perl b/challenge-131/arne-sommer/perl/coar-perl new file mode 100755 index 0000000000..fdd84bae37 --- /dev/null +++ b/challenge-131/arne-sommer/perl/coar-perl @@ -0,0 +1,44 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +use Getopt::Long; +use Perl6::Junction 'all'; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +die "Integers only" unless all(@ARGV) == qr/^\d+$/; + +my @result; + +my $current = shift(@ARGV) // die "No numbers"; +my @current = ($current); + +say ": Candidate: $current" if $verbose; + +for my $i (@ARGV) +{ + if ($i > $current +1) + { + my @copy = @current; + push(@result, \@copy); + say ": Push: [", join(",", @current), "]" if $verbose; + @current = (); + } + + die "Not sorted ($current < $i)" unless $i > $current; + + say ": Candidate: $i" if $verbose; + + push(@current, $i); + $current = $i; +} + +push(@result, \@current) if @current; + +say "(", join(", ", map { "[" . join(", ", @$_) . "]" } @result), ")"; + diff --git a/challenge-131/arne-sommer/perl/find-pairs-perl b/challenge-131/arne-sommer/perl/find-pairs-perl new file mode 100755 index 0000000000..e5d25114a9 --- /dev/null +++ b/challenge-131/arne-sommer/perl/find-pairs-perl @@ -0,0 +1,41 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; + +use Getopt::Long; +use Perl6::Junction 'any'; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $pairs = shift(@ARGV) // '""[]()'; +my $search = shift(@ARGV) // '"I like (parens) and the Apple ][+" they said.'; + +my @pairs = split(//, $pairs); +my @search = split(//, $search); + +my @open; +my @close; + +for my $index (0 .. @pairs -1) +{ + $index % 2 ? push(@open, $pairs[$index]) : push(@close, $pairs[$index]); +} + +say ": Open: @open" if $verbose; +say ": Close @close" if $verbose; + +my $open = ""; +my $close = ""; + +for my $char (@search) +{ + $open .= $char if any(@open) eq $char; + $close .= $char if any(@close) eq $char; +} + +say $open; +say $close; diff --git a/challenge-131/arne-sommer/raku/ch-1.raku b/challenge-131/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..2b7bcf7551 --- /dev/null +++ b/challenge-131/arne-sommer/raku/ch-1.raku @@ -0,0 +1,38 @@ +#! /usr/bin/env raku + +multi MAIN (Str $input = "1 2 3 6 7 8 9", :v(:$verbose)) +{ + my @input = $input.words; + MAIN(@input, :$verbose); +} + +multi MAIN (*@input where @input.elems > 1 && all(@input) ~~ /^\d+$/, :v(:$verbose)) +{ + die "Not sorted" unless [<] @input; + + my @result; + my $current = @input.shift; + my @current = $current,; + + say ": Candidate: $current" if $verbose; + + for @input -> $i + { + if $i > $current +1 + { + @result.push: @current.clone; + say ": Push: [", @current.join(","), "]" if $verbose; + @current = (); + } + + say ": Candidate: $i" if $verbose; + + @current.push: $i; + $current = $i; + } + + @result.push: @current if @current; + + say '(' ~ @result.map({ '[' ~ @$_.join(', ') ~ ']' }).join(', ') ~ ')'; + +} diff --git a/challenge-131/arne-sommer/raku/ch-2.raku b/challenge-131/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..bb56753653 --- /dev/null +++ b/challenge-131/arne-sommer/raku/ch-2.raku @@ -0,0 +1,25 @@ +#! /usr/bin/env raku + +unit sub MAIN ($pairs = '""[]()', + $search = '"I like (parens) and the Apple ][+" they said.', + :v(:$verbose)); + +my @pairs = $pairs.comb; + +my @open = @pairs[0, 2 ... *]; +my @close = @pairs[1, 3 ... *]; + +say ": Open: @open[]" if $verbose; +say ": Close @close[]" if $verbose; + +my $open = ""; +my $close = ""; + +for $search.comb -> $char +{ + $open ~= $char if any(@open) eq $char; + $close ~= $char if any(@close) eq $char; +} + +say $open; +say $close; diff --git a/challenge-131/arne-sommer/raku/coar b/challenge-131/arne-sommer/raku/coar new file mode 100755 index 0000000000..10af3d3e8a --- /dev/null +++ b/challenge-131/arne-sommer/raku/coar @@ -0,0 +1,37 @@ +#! /usr/bin/env raku + +multi MAIN (Str $input = "1 2 3 6 7 8 9", :v(:$verbose)) +{ + my @input = $input.words; + MAIN(@input, :$verbose); +} + +multi MAIN (*@input where @input.elems > 1 && all(@input) ~~ /^\d+$/, :v(:$verbose)) +{ + die "Not sorted" unless [<] @input; + + my @result; + my $current = @input.shift; + my @current = $current,; + + say ": Candidate: $current" if $verbose; + + for @input -> $i + { + if $i > $current +1 + { + @result.push: @current.clone; + say ": Push: [", @current.join(","), "]" if $verbose; + @current = (); + } + + say ": Candidate: $i" if $verbose; + + @current.push: $i; + $current = $i; + } + + @result.push: @current if @current; + + say @result; +} diff --git a/challenge-131/arne-sommer/raku/coar-fixed b/challenge-131/arne-sommer/raku/coar-fixed new file mode 100755 index 0000000000..2b7bcf7551 --- /dev/null +++ b/challenge-131/arne-sommer/raku/coar-fixed @@ -0,0 +1,38 @@ +#! /usr/bin/env raku + +multi MAIN (Str $input = "1 2 3 6 7 8 9", :v(:$verbose)) +{ + my @input = $input.words; + MAIN(@input, :$verbose); +} + +multi MAIN (*@input where @input.elems > 1 && all(@input) ~~ /^\d+$/, :v(:$verbose)) +{ + die "Not sorted" unless [<] @input; + + my @result; + my $current = @input.shift; + my @current = $current,; + + say ": Candidate: $current" if $verbose; + + for @input -> $i + { + if $i > $current +1 + { + @result.push: @current.clone; + say ": Push: [", @current.join(","), "]" if $verbose; + @current = (); + } + + say ": Candidate: $i" if $verbose; + + @current.push: $i; + $current = $i; + } + + @result.push: @current if @current; + + say '(' ~ @result.map({ '[' ~ @$_.join(', ') ~ ']' }).join(', ') ~ ')'; + +} diff --git a/challenge-131/arne-sommer/raku/find-pairs b/challenge-131/arne-sommer/raku/find-pairs new file mode 100755 index 0000000000..bb56753653 --- /dev/null +++ b/challenge-131/arne-sommer/raku/find-pairs @@ -0,0 +1,25 @@ +#! /usr/bin/env raku + +unit sub MAIN ($pairs = '""[]()', + $search = '"I like (parens) and the Apple ][+" they said.', + :v(:$verbose)); + +my @pairs = $pairs.comb; + +my @open = @pairs[0, 2 ... *]; +my @close = @pairs[1, 3 ... *]; + +say ": Open: @open[]" if $verbose; +say ": Close @close[]" if $verbose; + +my $open = ""; +my $close = ""; + +for $search.comb -> $char +{ + $open ~= $char if any(@open) eq $char; + $close ~= $char if any(@close) eq $char; +} + +say $open; +say $close; -- cgit