diff options
| author | arnesom <arne@bbop.org> | 2022-02-20 20:23:41 +0100 |
|---|---|---|
| committer | arnesom <arne@bbop.org> | 2022-02-20 20:23:41 +0100 |
| commit | 38aa0c52196b2cda0f30479ca40b14823e729c2b (patch) | |
| tree | 0c72ea0ad7b053b219dc310a83e856fc86e816c8 | |
| parent | c252f6a919fec1fc6bbe9f5a83870c35b504fa38 (diff) | |
| download | perlweeklychallenge-club-38aa0c52196b2cda0f30479ca40b14823e729c2b.tar.gz perlweeklychallenge-club-38aa0c52196b2cda0f30479ca40b14823e729c2b.tar.bz2 perlweeklychallenge-club-38aa0c52196b2cda0f30479ca40b14823e729c2b.zip | |
Arne Sommer
| -rw-r--r-- | challenge-152/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-152/arne-sommer/raku/ch-1.raku | 6 | ||||
| -rwxr-xr-x | challenge-152/arne-sommer/raku/ch-2.raku | 22 | ||||
| -rwxr-xr-x | challenge-152/arne-sommer/raku/rectangle-area | 22 | ||||
| -rwxr-xr-x | challenge-152/arne-sommer/raku/triangle-sum-path | 6 | ||||
| -rwxr-xr-x | challenge-152/arne-sommer/raku/triangle-sum-path-child | 41 |
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; |
