Tìm các bước chạy trong một mảng
Một lần chạy được định nghĩa là ba hoặc nhiều số tăng so với trước đó với một bước không đổi. Ví dụ: [1,2,3] sẽ là một bước chạy với bước 1, [1,3,5,7] sẽ là một bước chạy với bước 2 và [1,2,4,5] không phải là một bước chạy.
Chúng ta có thể diễn tả các lần chạy này bằng ký hiệu "i to j by s" trong đó i là số đầu tiên của lần chạy, j là số cuối cùng của lần chạy và s là bước. Tuy nhiên, các bước của bước 1 sẽ được thể hiện "i to j".
Vì vậy, bằng cách sử dụng các mảng trước, chúng tôi nhận được:
[1,2,3] -> "1 đến 3"
[1,3,5,7] -> "1to7by2"
[1,2,4,5] -> "1 2 4 5"
Trong thử thách này, nhiệm vụ của bạn là làm điều này cho các mảng có thể có nhiều lần chạy.
Ví dụ mã Python với đệ quy:
def arr_comp_rec(a, start_index):
# Early exit and recursion end point
if start_index == len(a)-1:
return str(a[-1])
elif start_index == len(a):
return ''
# Keep track of first delta to compare while searching
first_delta = a[start_index+1] - a[start_index]
last = True
for i in range(start_index, len(a)-1):
delta = a[i+1] - a[i]
if delta != first_delta:
last = False
break
# If it ran through the for loop, we need to make sure it gets the last value
if last: i += 1
if i - start_index > 1:
# There is more than 2 numbers between the indexes
if first_delta == 1:
# We don't need by if step = 1
return "{}to{} ".format(a[start_index], a[i]) + arr_comp_rec(a, i+1)
else:
return "{}to{}by{} ".format(a[start_index], a[i], first_delta) + arr_comp_rec(a, i+1)
else:
# There is only one number we can return
return "{} ".format(a[start_index]) + arr_comp_rec(a, i)
Đầu vào
Mảng các số nguyên dương được sắp xếp (không trùng lặp)
Đầu ra
Chuỗi các lần chạy cách nhau bởi một khoảng trắng hoặc một chuỗi chuỗi của các lần chạy
Không cần phải tham lam theo một hướng cụ thể
Có thể có khoảng trắng ở cuối
Các trường hợp thử nghiệm
In: [1000, 1002, 1004, 1006, 1008, 1010]
Out: "1000to1010by2"
In: [1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]
Out: "1to3 5 8 13 21 34 55 89 144 233"
In: [10, 20, 30, 40, 60]
Out: "10to40by10 60"
In: [5, 6, 8, 11, 15, 16, 17]
Out: "5 6 8 11 15to17"
In: [1, 2, 3, 4, 5, 6, 7, 9, 11, 13, 15, 30, 45, 50, 60, 70, 80, 90, 91, 93]
Out: "1to7 9to15by2 30 45 50to90by10 91 93"
Đây là mã golf nên số byte thắng ít nhất.
[4, 5, 6, 7, 9, 11, 13, 15]
không thể 4to6 7to15by2
?)