aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2021-06-20 21:22:25 +0200
committerarnesom <arne@bbop.org>2021-06-20 21:22:25 +0200
commitb6165fd25a2a3ea272685814df9a14a61db2dc4c (patch)
tree1009466fe8d5e1b9fbc5622850c5ab924bed3577
parent0adc25f68a1b9a21964bf333911585b8a2cdd710 (diff)
downloadperlweeklychallenge-club-b6165fd25a2a3ea272685814df9a14a61db2dc4c.tar.gz
perlweeklychallenge-club-b6165fd25a2a3ea272685814df9a14a61db2dc4c.tar.bz2
perlweeklychallenge-club-b6165fd25a2a3ea272685814df9a14a61db2dc4c.zip
Arne Sommer
-rw-r--r--challenge-117/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-117/arne-sommer/perl/ch-1.pl20
-rwxr-xr-xchallenge-117/arne-sommer/perl/ch-2.pl38
-rwxr-xr-xchallenge-117/arne-sommer/perl/missing-row-loops-perl37
-rwxr-xr-xchallenge-117/arne-sommer/perl/missing-row-perl20
-rwxr-xr-xchallenge-117/arne-sommer/perl/possible-paths-perl38
-rwxr-xr-xchallenge-117/arne-sommer/raku/ch-1.raku7
-rwxr-xr-xchallenge-117/arne-sommer/raku/ch-2.raku23
-rwxr-xr-xchallenge-117/arne-sommer/raku/missing-row7
-rwxr-xr-xchallenge-117/arne-sommer/raku/missing-row-loops28
-rwxr-xr-xchallenge-117/arne-sommer/raku/possible-paths23
-rwxr-xr-xchallenge-117/arne-sommer/raku/possible-paths-loop27
-rw-r--r--challenge-117/arne-sommer/text-file.txt14
13 files changed, 283 insertions, 0 deletions
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