From b6165fd25a2a3ea272685814df9a14a61db2dc4c Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 20 Jun 2021 21:22:25 +0200 Subject: Arne Sommer --- challenge-117/arne-sommer/blog.txt | 1 + challenge-117/arne-sommer/perl/ch-1.pl | 20 ++++++++++++ challenge-117/arne-sommer/perl/ch-2.pl | 38 ++++++++++++++++++++++ .../arne-sommer/perl/missing-row-loops-perl | 37 +++++++++++++++++++++ challenge-117/arne-sommer/perl/missing-row-perl | 20 ++++++++++++ challenge-117/arne-sommer/perl/possible-paths-perl | 38 ++++++++++++++++++++++ challenge-117/arne-sommer/raku/ch-1.raku | 7 ++++ challenge-117/arne-sommer/raku/ch-2.raku | 23 +++++++++++++ challenge-117/arne-sommer/raku/missing-row | 7 ++++ challenge-117/arne-sommer/raku/missing-row-loops | 28 ++++++++++++++++ challenge-117/arne-sommer/raku/possible-paths | 23 +++++++++++++ challenge-117/arne-sommer/raku/possible-paths-loop | 27 +++++++++++++++ challenge-117/arne-sommer/text-file.txt | 14 ++++++++ 13 files changed, 283 insertions(+) create mode 100644 challenge-117/arne-sommer/blog.txt create mode 100755 challenge-117/arne-sommer/perl/ch-1.pl create mode 100755 challenge-117/arne-sommer/perl/ch-2.pl create mode 100755 challenge-117/arne-sommer/perl/missing-row-loops-perl create mode 100755 challenge-117/arne-sommer/perl/missing-row-perl create mode 100755 challenge-117/arne-sommer/perl/possible-paths-perl create mode 100755 challenge-117/arne-sommer/raku/ch-1.raku create mode 100755 challenge-117/arne-sommer/raku/ch-2.raku create mode 100755 challenge-117/arne-sommer/raku/missing-row create mode 100755 challenge-117/arne-sommer/raku/missing-row-loops create mode 100755 challenge-117/arne-sommer/raku/possible-paths create mode 100755 challenge-117/arne-sommer/raku/possible-paths-loop create mode 100644 challenge-117/arne-sommer/text-file.txt diff --git a/challenge-117/arne-sommer/blog.txt b/challenge-117/arne-sommer/blog.txt new file mode 100644 index 0000000000..81489d8301 --- /dev/null +++ b/challenge-117/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/rowdy-path.html diff --git a/challenge-117/arne-sommer/perl/ch-1.pl b/challenge-117/arne-sommer/perl/ch-1.pl new file mode 100755 index 0000000000..9d0cfe212a --- /dev/null +++ b/challenge-117/arne-sommer/perl/ch-1.pl @@ -0,0 +1,20 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use File::Slurp; +use List::Compare; + +my $file = $ARGV[0] // die "Please specify a file"; + +my @ids = map { /^(\d+)\,/ } read_file($file, chomp => 1); +my @all = (1..15); + +my $lc = List::Compare->new('--unsorted', \@ids, \@all); + +my @difference = $lc->get_symmetric_difference(); + +say join(", ", @difference); + +# Ubuntu/Debian: liblist-compare-perl diff --git a/challenge-117/arne-sommer/perl/ch-2.pl b/challenge-117/arne-sommer/perl/ch-2.pl new file mode 100755 index 0000000000..69f3b5a481 --- /dev/null +++ b/challenge-117/arne-sommer/perl/ch-2.pl @@ -0,0 +1,38 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use Getopt::Long; + +no warnings qw(experimental::signatures); + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $N = shift(@ARGV); + +die "Specify a positive integer" unless $N =~ /^[1-9]\d*$/; + +my @result; + +traverse(0, 0, "", $N); + +sub traverse ($row, $col, $path, $size) +{ + if ($row == $col && $row == $size) + { + push(@result, $path); + return; + } + + traverse($row, $col +1, $path . "H", $size) if $col < $row; + traverse($row +1, $col +1, $path . "R", $size) if $col < $size; + traverse($row +1, $col, $path . "L", $size) if $row < $size; +} + +say join(", ", @result); + +say ": Number of paths: " . scalar @result if $verbose; diff --git a/challenge-117/arne-sommer/perl/missing-row-loops-perl b/challenge-117/arne-sommer/perl/missing-row-loops-perl new file mode 100755 index 0000000000..2a320c1707 --- /dev/null +++ b/challenge-117/arne-sommer/perl/missing-row-loops-perl @@ -0,0 +1,37 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use File::Slurp; +use Getopt::Long; + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $file = $ARGV[0] // die "Please specify a file"; + +my @ids; + +for my $line (read_file($file, chomp => 1)) +{ + my ($id, $content) = split(',', $line, 2); + + say ": ID: $id" if $verbose; + push(@ids, $id); +} +say ": IDs (sorted): " . join(", ", sort { $a <=> $b } @ids) if $verbose; + +my $expected = 1; + +for my $id (sort { $a <=> $b } @ids) +{ + say ": $id (expected $expected)" if $verbose; + unless ($id == $expected) + { + say $expected; + last; + } + $expected++; +} diff --git a/challenge-117/arne-sommer/perl/missing-row-perl b/challenge-117/arne-sommer/perl/missing-row-perl new file mode 100755 index 0000000000..9d0cfe212a --- /dev/null +++ b/challenge-117/arne-sommer/perl/missing-row-perl @@ -0,0 +1,20 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use File::Slurp; +use List::Compare; + +my $file = $ARGV[0] // die "Please specify a file"; + +my @ids = map { /^(\d+)\,/ } read_file($file, chomp => 1); +my @all = (1..15); + +my $lc = List::Compare->new('--unsorted', \@ids, \@all); + +my @difference = $lc->get_symmetric_difference(); + +say join(", ", @difference); + +# Ubuntu/Debian: liblist-compare-perl diff --git a/challenge-117/arne-sommer/perl/possible-paths-perl b/challenge-117/arne-sommer/perl/possible-paths-perl new file mode 100755 index 0000000000..69f3b5a481 --- /dev/null +++ b/challenge-117/arne-sommer/perl/possible-paths-perl @@ -0,0 +1,38 @@ +#! /usr/bin/env perl + +use strict; +use warnings; +use feature 'say'; +use feature 'signatures'; +use Getopt::Long; + +no warnings qw(experimental::signatures); + +my $verbose = 0; + +GetOptions("verbose" => \$verbose); + +my $N = shift(@ARGV); + +die "Specify a positive integer" unless $N =~ /^[1-9]\d*$/; + +my @result; + +traverse(0, 0, "", $N); + +sub traverse ($row, $col, $path, $size) +{ + if ($row == $col && $row == $size) + { + push(@result, $path); + return; + } + + traverse($row, $col +1, $path . "H", $size) if $col < $row; + traverse($row +1, $col +1, $path . "R", $size) if $col < $size; + traverse($row +1, $col, $path . "L", $size) if $row < $size; +} + +say join(", ", @result); + +say ": Number of paths: " . scalar @result if $verbose; diff --git a/challenge-117/arne-sommer/raku/ch-1.raku b/challenge-117/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..122a4fcd36 --- /dev/null +++ b/challenge-117/arne-sommer/raku/ch-1.raku @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $file where $file.IO.f && $file.IO.r, :l(:$limit) = 15); + +my $missing = (1 .. $limit) (-) $file.IO.lines.map({ /^(\d+)\,/ && $0.Int }); + +say "Missing row{ $missing.keys > 1 ?? "s" !! "" }: { $missing.keys.sort.join(", ") }"; diff --git a/challenge-117/arne-sommer/raku/ch-2.raku b/challenge-117/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..17d69f4f60 --- /dev/null +++ b/challenge-117/arne-sommer/raku/ch-2.raku @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $N where $N >= 1, :v(:$verbose)); + +my $seq := gather +{ + traverse(0, 0, "", $N); + + sub traverse ($row, $col, $path, $size) + { + return take $path if $row == $col == $size; + + traverse($row, $col +1, $path ~ "H", $size) if $col < $row; + traverse($row +1, $col +1, $path ~ "R", $size) if $col < $size; + traverse($row +1, $col, $path ~ "L", $size) if $row < $size; + + } +} + +say ": Number of paths: { $seq.elems } " if $verbose; + +say $seq.join(", "); + diff --git a/challenge-117/arne-sommer/raku/missing-row b/challenge-117/arne-sommer/raku/missing-row new file mode 100755 index 0000000000..122a4fcd36 --- /dev/null +++ b/challenge-117/arne-sommer/raku/missing-row @@ -0,0 +1,7 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $file where $file.IO.f && $file.IO.r, :l(:$limit) = 15); + +my $missing = (1 .. $limit) (-) $file.IO.lines.map({ /^(\d+)\,/ && $0.Int }); + +say "Missing row{ $missing.keys > 1 ?? "s" !! "" }: { $missing.keys.sort.join(", ") }"; diff --git a/challenge-117/arne-sommer/raku/missing-row-loops b/challenge-117/arne-sommer/raku/missing-row-loops new file mode 100755 index 0000000000..efff37a0b1 --- /dev/null +++ b/challenge-117/arne-sommer/raku/missing-row-loops @@ -0,0 +1,28 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $file where $file.IO.f && $file.IO.r, :v(:$verbose)); + +my @ids; + +for $file.IO.lines -> $line +{ + my ($id, $content) = $line.split(',', 2); + + say ": ID: $id" if $verbose; + @ids.push: $id.Int; +} + +say ": IDs (sorted): { @ids.sort.join(", ") }" if $verbose; + +my $expected = 1; + +for @ids.sort -> $id +{ + say ": $id (expected $expected)" if $verbose; + unless $id == $expected + { + say $expected; + last; + } + $expected++; +} diff --git a/challenge-117/arne-sommer/raku/possible-paths b/challenge-117/arne-sommer/raku/possible-paths new file mode 100755 index 0000000000..17d69f4f60 --- /dev/null +++ b/challenge-117/arne-sommer/raku/possible-paths @@ -0,0 +1,23 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $N where $N >= 1, :v(:$verbose)); + +my $seq := gather +{ + traverse(0, 0, "", $N); + + sub traverse ($row, $col, $path, $size) + { + return take $path if $row == $col == $size; + + traverse($row, $col +1, $path ~ "H", $size) if $col < $row; + traverse($row +1, $col +1, $path ~ "R", $size) if $col < $size; + traverse($row +1, $col, $path ~ "L", $size) if $row < $size; + + } +} + +say ": Number of paths: { $seq.elems } " if $verbose; + +say $seq.join(", "); + diff --git a/challenge-117/arne-sommer/raku/possible-paths-loop b/challenge-117/arne-sommer/raku/possible-paths-loop new file mode 100755 index 0000000000..bd3b3e72e4 --- /dev/null +++ b/challenge-117/arne-sommer/raku/possible-paths-loop @@ -0,0 +1,27 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $N where $N >= 1, :v(:$verbose)); + +my @result; +my @todo = ( [0, 0,"", $N], ); + +while @todo +{ + my $current = @todo.shift; + my ($row, $col, $path, $size) = @($current); + + if $row == $col == $size + { + @result.push($path); + } + else + { + @todo.push( [$row, $col +1, $path ~ "H", $size] ) if $col < $row; + @todo.push( [$row +1, $col +1, $path ~ "R", $size] ) if $col < $size; + @todo.push( [$row +1, $col, $path ~ "L", $size] ) if $row < $size; + } +} + +say @result.join(", "); + +say ": Number of paths: { @result.elems }" if $verbose; diff --git a/challenge-117/arne-sommer/text-file.txt b/challenge-117/arne-sommer/text-file.txt new file mode 100644 index 0000000000..5b9d9ab1ce --- /dev/null +++ b/challenge-117/arne-sommer/text-file.txt @@ -0,0 +1,14 @@ +11, Line Eleven +1, Line one +9, Line Nine +13, Line Thirteen +2, Line two +6, Line Six +8, Line Eight +10, Line Ten +7, Line Seven +4, Line Four +14, Line Fourteen +3, Line three +15, Line Fifteen +5, Line Five -- cgit