aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorarnesom <arne@bbop.org>2022-02-20 20:23:41 +0100
committerarnesom <arne@bbop.org>2022-02-20 20:23:41 +0100
commit38aa0c52196b2cda0f30479ca40b14823e729c2b (patch)
tree0c72ea0ad7b053b219dc310a83e856fc86e816c8
parentc252f6a919fec1fc6bbe9f5a83870c35b504fa38 (diff)
downloadperlweeklychallenge-club-38aa0c52196b2cda0f30479ca40b14823e729c2b.tar.gz
perlweeklychallenge-club-38aa0c52196b2cda0f30479ca40b14823e729c2b.tar.bz2
perlweeklychallenge-club-38aa0c52196b2cda0f30479ca40b14823e729c2b.zip
Arne Sommer
-rw-r--r--challenge-152/arne-sommer/blog.txt1
-rwxr-xr-xchallenge-152/arne-sommer/raku/ch-1.raku6
-rwxr-xr-xchallenge-152/arne-sommer/raku/ch-2.raku22
-rwxr-xr-xchallenge-152/arne-sommer/raku/rectangle-area22
-rwxr-xr-xchallenge-152/arne-sommer/raku/triangle-sum-path6
-rwxr-xr-xchallenge-152/arne-sommer/raku/triangle-sum-path-child41
6 files changed, 98 insertions, 0 deletions
diff --git a/challenge-152/arne-sommer/blog.txt b/challenge-152/arne-sommer/blog.txt
new file mode 100644
index 0000000000..12be1ea332
--- /dev/null
+++ b/challenge-152/arne-sommer/blog.txt
@@ -0,0 +1 @@
+https://raku-musings.com/triangular-rectangle.html
diff --git a/challenge-152/arne-sommer/raku/ch-1.raku b/challenge-152/arne-sommer/raku/ch-1.raku
new file mode 100755
index 0000000000..4a7806462a
--- /dev/null
+++ b/challenge-152/arne-sommer/raku/ch-1.raku
@@ -0,0 +1,6 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $tree = "1 | 5 3 | 2 3 4 | 7 1 0 2 | 6 4 5 2 8");
+
+say $tree.split("|")>>.words>>.min.sum;
+
diff --git a/challenge-152/arne-sommer/raku/ch-2.raku b/challenge-152/arne-sommer/raku/ch-2.raku
new file mode 100755
index 0000000000..4bce7c5431
--- /dev/null
+++ b/challenge-152/arne-sommer/raku/ch-2.raku
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($string, :v(:$verbose));
+
+my ($Ax1, $Ay1, $Ax2, $Ay2, $Bx1, $By1, $Bx2, $By2) = $string.words>>.Numeric;
+
+my $A-area = ($Ax2 - $Ax1).abs * ($Ay2 - $Ay1).abs;
+my $B-area = ($Bx2 - $Bx1).abs * ($By2 - $By1).abs;
+
+my $x-dist = min($Ax2, $Bx2) - max($Ax1, $Bx1);
+my $y-dist = min($Ay2, $By2) - max($Ay1, $By1);
+
+my $i-area = ($x-dist > 0 && $y-dist > 0) ?? $x-dist * $y-dist !! 0;
+
+if $verbose
+{
+ say ": First rectangle has area: $A-area";
+ say ": Second rectangle has area: $B-area";
+ say ": Intersection has area: $i-area";
+}
+
+say $A-area + $B-area - $i-area; \ No newline at end of file
diff --git a/challenge-152/arne-sommer/raku/rectangle-area b/challenge-152/arne-sommer/raku/rectangle-area
new file mode 100755
index 0000000000..4bce7c5431
--- /dev/null
+++ b/challenge-152/arne-sommer/raku/rectangle-area
@@ -0,0 +1,22 @@
+#! /usr/bin/env raku
+
+unit sub MAIN ($string, :v(:$verbose));
+
+my ($Ax1, $Ay1, $Ax2, $Ay2, $Bx1, $By1, $Bx2, $By2) = $string.words>>.Numeric;
+
+my $A-area = ($Ax2 - $Ax1).abs * ($Ay2 - $Ay1).abs;
+my $B-area = ($Bx2 - $Bx1).abs * ($By2 - $By1).abs;
+
+my $x-dist = min($Ax2, $Bx2) - max($Ax1, $Bx1);
+my $y-dist = min($Ay2, $By2) - max($Ay1, $By1);
+
+my $i-area = ($x-dist > 0 && $y-dist > 0) ?? $x-dist * $y-dist !! 0;
+
+if $verbose
+{
+ say ": First rectangle has area: $A-area";
+ say ": Second rectangle has area: $B-area";
+ say ": Intersection has area: $i-area";
+}
+
+say $A-area + $B-area - $i-area; \ No newline at end of file
diff --git a/challenge-152/arne-sommer/raku/triangle-sum-path b/challenge-152/arne-sommer/raku/triangle-sum-path
new file mode 100755
index 0000000000..4a7806462a
--- /dev/null
+++ b/challenge-152/arne-sommer/raku/triangle-sum-path
@@ -0,0 +1,6 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $tree = "1 | 5 3 | 2 3 4 | 7 1 0 2 | 6 4 5 2 8");
+
+say $tree.split("|")>>.words>>.min.sum;
+
diff --git a/challenge-152/arne-sommer/raku/triangle-sum-path-child b/challenge-152/arne-sommer/raku/triangle-sum-path-child
new file mode 100755
index 0000000000..c56d71a9c5
--- /dev/null
+++ b/challenge-152/arne-sommer/raku/triangle-sum-path-child
@@ -0,0 +1,41 @@
+#! /usr/bin/env raku
+
+unit sub MAIN (Str $tree = "1 | 5 3 | 2 3 4 | 7 1 0 2 | 6 4 5 2 8", :v(:$verbose), :m($max));
+
+my @tree = $tree.split("|")>>.words>>.Numeric;
+my $rows = @tree.elems;
+
+for 1 .. $rows -> $row
+{
+ die "Wrong number of elements in row $row ({ (@tree[$row - 1]).elems } instead of $row)" unless @tree[$row - 1] == $row;
+}
+
+say ": Tree height: $rows";
+
+my @paths;
+my @values;
+
+traverse(0, (), ());
+
+sub traverse ($current, @path is copy, @value is copy)
+{
+ @value.push: @tree[@path.elems][$current];
+
+ @path.push: $current;
+
+ if (@path.elems < $rows)
+ {
+ traverse($current, @path, @value);
+ traverse($current +1, @path, @value);
+ }
+ else
+ {
+ say ": Values: [{ @value.join(", ") }] (indices [{ @path.join(", ") }) - sum { @value.sum }" if $verbose;
+ @paths.push: @path;
+ @values.push: @value;
+
+ return;
+ }
+}
+
+say $max ?? @values>>.sum.max !! @values>>.sum.min;