-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy path1266-minimum-time-visiting-all-points.rb
56 lines (48 loc) · 1.73 KB
/
1266-minimum-time-visiting-all-points.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# frozen_string_literal: true
# 1266. Minimum Time Visiting All Points
# Easy
# https://leetcode.com/problems/minimum-time-visiting-all-points/
=begin
On a 2D plane, there are n points with integer coordinates points[i] = [xi, yi]. Return the minimum time in seconds to visit all the points in the order given by points.
You can move according to these rules:
* In 1 second, you can either:
* move vertically by one unit,
* move horizontally by one unit, or
* move diagonally sqrt(2) units (in other words, move one unit vertically then one unit horizontally in 1 second).
* You have to visit the points in the same order as they appear in the array.
* You are allowed to pass through points that appear later in the order, but these do not count as visits.
Example 1:
Input: points = [[1,1],[3,4],[-1,0]]
Output: 7
Explanation: One optimal path is [1,1] -> [2,2] -> [3,3] -> [3,4] -> [2,3] -> [1,2] -> [0,1] -> [-1,0]
Time from [1,1] to [3,4] = 3 seconds
Time from [3,4] to [-1,0] = 4 seconds
Total time = 7 seconds
Example 2:
Input: points = [[3,2],[-2,2]]
Output: 5
Constraints:
points.length == n
1 <= n <= 100
points[i].length == 2
-1000 <= points[i][0], points[i][1] <= 1000
=end
# @param {Integer[][]} points
# @return {Integer}
def min_time_to_visit_all_points(points)
result = 0
(0...points.length - 1).each do |i|
result += [(points[i][0] - points[i + 1][0]).abs, (points[i][1] - points[i + 1][1]).abs].max
end
result
end
# **************** #
# TEST #
# **************** #
require "test/unit"
class Test_min_time_to_visit_all_points < Test::Unit::TestCase
def test_
assert_equal 7, min_time_to_visit_all_points([[1, 1], [3, 4], [-1, 0]])
assert_equal 5, min_time_to_visit_all_points([[3, 2], [-2, 2]])
end
end