diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2025-08-14 09:44:09 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-14 09:44:09 +0100 |
| commit | 3ae278b80c1fc97fb3ff402c8c9df5a57c23d753 (patch) | |
| tree | 9b232f63a05a37f399225b0e38e8e457a26679f3 /challenge-334 | |
| parent | 1c777dc4049fa6ceb6b09f118c64882271d82026 (diff) | |
| parent | e86fb1c0f7501d910447b2d2582e047af369c8a5 (diff) | |
| download | perlweeklychallenge-club-3ae278b80c1fc97fb3ff402c8c9df5a57c23d753.tar.gz perlweeklychallenge-club-3ae278b80c1fc97fb3ff402c8c9df5a57c23d753.tar.bz2 perlweeklychallenge-club-3ae278b80c1fc97fb3ff402c8c9df5a57c23d753.zip | |
Merge pull request #12513 from ash/ash-334
Task 2 Week 334 in Raku by @ash
Diffstat (limited to 'challenge-334')
| -rw-r--r-- | challenge-334/ash/raku/ch-2.raku | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/challenge-334/ash/raku/ch-2.raku b/challenge-334/ash/raku/ch-2.raku new file mode 100644 index 0000000000..af861071fd --- /dev/null +++ b/challenge-334/ash/raku/ch-2.raku @@ -0,0 +1,47 @@ +# Task 2 of the Weekly Challenge 334 +# https://theweeklychallenge.org/blog/perl-weekly-challenge-334/#TASK2 + +output(solve([[1, 2], [3, 1], [2, 4], [2, 3]], [3, 4])); # 2 +output(solve([[3, 4], [2, 3], [1, 5], [2, 5]], [2, 5])); # 3 +output(solve([[2, 2], [3, 3], [4, 4]], [1, 1])); # -1 +output(solve([[0, 1], [1, 0], [0, 2], [2, 0]], [0, 0])); # 0 +output(solve([[5, 6], [6, 5], [5, 4], [4, 5]], [5, 5])); # 0 + + +sub output($point) { + say 'Result: ', $point, "\n"; +} + +sub solve(@points, $point) { + say 'Input points: ', @points, ', reference point: ', $point; + + my ($x, $y) = $point[0..1]; + + my @valid; + for @points.kv -> $i, $p { + next if $p[0] != $x && $p[1] != $y; + # found a valid point + + my $distance = abs($p[0] - $x) + abs($p[1] - $y); + push @valid, { + index => $i, + point => $p, + distance => $distance, + }; + } + + say 'Valid points: ', @valid; + + return -1 unless @valid; + + my $min_distance = (@valid.map: *<distance>).min; + say "Minimum distance: $min_distance"; + + my @valid_with_min_distance = @valid.grep: *<distance> == $min_distance; + say 'Points with minimum distance: ', @valid_with_min_distance; + return @valid_with_min_distance[0]<index> if @valid_with_min_distance.elems == 1; + + my $min_index = (@valid_with_min_distance.map: *<index>).min; + say "Minimum index: $min_index"; + return (@valid_with_min_distance.grep: *<index> == $min_index)[0]<index>; +} |
