Robbie Hatley's Solutions, in Perl, for The Weekly Challenge #334 (“Range Sum” and “Nearest Valid Point”)

For those not familiar with "The Weekly Challenge", it is a weekly programming puzzle with two parts, with a new pair of tasks each Monday. You can find it here:

The Weekly Challenge

The Weekly Challenge for the week of 2025-08-11 through 2025-08-17 is #334

The tasks for challenge #334 are as follows:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Task 334-1: Range Sum
Submitted by: Mohammad Sajid Anwar
You are given a list integers and pair of indices. Write a
script to return the sum of integers between the given
indices (inclusive).

Example #1:
Input: @ints = (-2, 0, 3, -5, 2, -1), $x = 0, $y = 2
Output: 1

Example #2:
Input: @ints = (1, -2, 3, -4, 5), $x = 1, $y = 3
Output: -3

Example #3:
Input: @ints = (1, 0, 2, -1, 3), $x = 3, $y = 4
Output: 2

Example #4:
Input: @ints = (-5, 4, -3, 2, -1, 0), $x = 0, $y = 3
Output: -2

Example #5:
Input: @ints = (-1, 0, 2, -3, -2, 1), $x = 0, $y = 2
Output: 1

This is just a matter of using "sum0" from "List::Util" to sum a slice.

Robbie Hatley's Perl Solution to The Weekly Challenge 334-1

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Task 334-2: Nearest Valid Point
Submitted by: Mohammad Sajid Anwar
You are given current location as two integers: x and y.You are
also given a list of points on the grid. A point is considered
"valid" if it shares either the same x-coordinate or the same
y-coordinate as the current location. Write a script to return
the index of the valid point that has the smallest Manhattan
distance to the current location. If multiple valid points are
tied for the smallest distance,return the one with the lowest
index. If no valid points exist, return -1.

The Manhattan distance between two points (x1, y1) and (x2, y2)
is calculated as: |x1 - x2| + |y1 - y2|

Example 1
Input: $x = 3, $y = 4, @points ([1, 2], [3, 1], [2, 4], [2, 3])
Output: 2
Valid points: [3, 1] (same x), [2, 4] (same y)
Manhattan distances:
    [3, 1] => |3-3| + |4-1| = 3
    [2, 4] => |3-2| + |4-4| = 1
Closest valid point is [2, 4] at index 2.

Example 2
Input: $x = 2, $y = 5, @points ([3, 4], [2, 3], [1, 5], [2, 5])
Output: 3
Valid points: [2, 3], [1, 5], [2, 5]
Manhattan distances:
    [2, 3] => 2
    [1, 5] => 1
    [2, 5] => 0
Closest valid point is [2, 5] at index 3.

Example 3
Input: $x = 1, $y = 1, @points ([2, 2], [3, 3], [4, 4])
Output: -1
No point shares x or y with (1, 1).

Example 4
Input: $x = 0, $y = 0, @points ([0, 1], [1, 0], [0, 2], [2, 0])
Output: 0
Valid points: all of them
Manhattan distances:
    [0, 1] => 1
    [1, 0] => 1
    [0, 2] => 2
    [2, 0] => 2
Tie between index 0 and 1, pick the smaller index: 0

Example 5
Input: $x = 5, $y = 5, @points ([5, 6], [6, 5], [5, 4], [4, 5])
Output: 0
Valid points: all of them
    [5, 6] => 1
    [6, 5] => 1
    [5, 4] => 1
    [4, 5] => 1
All tie, return the one with the lowest index: 0

I'll write three subs:

  • sub md # Manhattan Distance
  • sub iv # Is Valid point?
  • sub nv # Nearest Valid point

Robbie Hatley's Perl Solution to The Weekly Challenge 334-2

That's it for challenge 334; see you on challenge 335!

Comments

Popular posts from this blog

Robbie Hatley's Solutions, in Perl, for The Weekly Challenge #336 (“Equal Group” and “Final Score”)

Robbie Hatley's Solutions, in Perl, for The Weekly Challenge #326 (“Day of Year” and “Decompressed List”)