From ad851f71671d39d7734f5ea41157a6f89731b22a Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Mon, 11 Aug 2025 10:55:42 +0000 Subject: Challenge 334 Solutions (Raku) --- challenge-334/mark-anderson/raku/ch-1.raku | 13 +++++++++ challenge-334/mark-anderson/raku/ch-2.raku | 45 ++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 challenge-334/mark-anderson/raku/ch-1.raku create mode 100644 challenge-334/mark-anderson/raku/ch-2.raku diff --git a/challenge-334/mark-anderson/raku/ch-1.raku b/challenge-334/mark-anderson/raku/ch-1.raku new file mode 100644 index 0000000000..e2c72a4b8b --- /dev/null +++ b/challenge-334/mark-anderson/raku/ch-1.raku @@ -0,0 +1,13 @@ +#!/usr/bin/env raku +use Test; + +is range-sum(<-2 0 3 -5 2 -1>, 0, 2), 1; +is range-sum(<1 -2 3 -4 5>, 1, 3), -3; +is range-sum(<1 0 2 -1 3>, 3, 4), 2; +is range-sum(<-5 4 -3 2 -1 0>, 0, 3), -2; +is range-sum(<-1 0 2 -3 -2 1>, 0, 2), 1; + +sub range-sum(@ints, $x, $y) +{ + sum @ints[$x..$y] +} diff --git a/challenge-334/mark-anderson/raku/ch-2.raku b/challenge-334/mark-anderson/raku/ch-2.raku new file mode 100644 index 0000000000..00f9cbbab7 --- /dev/null +++ b/challenge-334/mark-anderson/raku/ch-2.raku @@ -0,0 +1,45 @@ +#!/usr/bin/env raku +use Test; + +is nearest-valid-point(3, 4, [1,2], [3,1], [2,4], [2,3]), 2; +is nearest-valid-point(2, 5, [3,4], [2,3], [1,5], [2,5]), 3; +is nearest-valid-point(1, 1, [2,2], [3,3], [4,4]), -1; +is nearest-valid-point(0, 0, [0,1], [1,0], [0,2], [2,0]), 0; +is nearest-valid-point(5, 5, [5,6], [6,5], [5,4], [4,5]), 0; + +is nearest-valid-point-maybe(3, 4, [1,2], [3,1], [2,4], [2,3]), 2; +is nearest-valid-point-maybe(2, 5, [3,4], [2,3], [1,5], [2,5]), 3; +is nearest-valid-point-maybe(1, 1, [2,2], [3,3], [4,4]), -1; +is nearest-valid-point-maybe(0, 0, [0,1], [1,0], [0,2], [2,0]), 0; +is nearest-valid-point-maybe(5, 5, [5,6], [6,5], [5,4], [4,5]), 0; + +sub nearest-valid-point($x, $y, +@points) +{ + sub distance($p) + { + $p.key => abs($x - $p.value[0]) + abs($y - $p.value[1]) + } + + my @mins = @points.grep({ any $x == .[0], $y == .[1] }, :p) + .map(&distance) + .Map + .minpairs; + + @mins ?? @mins.min(:by(*.key)).key !! -1 +} + +# this seems to work but I'm not sure it should +sub nearest-valid-point-maybe($x, $y, +@points) +{ + sub distance($p) + { + abs($x - $p.value[0]) + abs($y - $p.value[1]) => $p.key + } + + try return @points.grep({ any $x == .[0], $y == .[1] }, :p) + .map(&distance) + .min + .value; + + return -1 +} -- cgit