Temukan run di dalam array
Suatu run didefinisikan sebagai tiga angka atau lebih yang bertambah dari sebelumnya dengan langkah konstan. Misalnya [1,2,3] akan dijalankan dengan langkah 1, [1,3,5,7] akan dijalankan dengan langkah 2, dan [1,2,4,5] bukan lari.
Kita dapat menyatakan run ini dengan notasi "i to j by s" di mana i adalah angka pertama dari run, j adalah angka terakhir dari run, dan s adalah langkahnya. Namun, menjalankan langkah 1 akan dinyatakan "i to j".
Jadi dengan menggunakan array sebelumnya, kita mendapatkan:
[1,2,3] -> "1to3"
[1,3,5,7] -> "1to7by2"
[1,2,4,5] -> "1 2 4 5"
Dalam tantangan ini, tugas Anda adalah melakukan ini untuk array yang mungkin memiliki beberapa kali proses.
Contoh kode Python dengan rekursi:
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)
Memasukkan
Array int positif yang diurutkan (tidak ada duplikat)
Keluaran
String yang berjalan dipisahkan oleh spasi, atau array string yang dijalankan
Tidak perlu serakah ke arah tertentu
Dapat memiliki spasi spasi tambahan
Uji Kasus
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"
Ini adalah kode-golf sehingga jumlah byte yang menang paling sedikit.
[4, 5, 6, 7, 9, 11, 13, 15]
tidak bisa 4to6 7to15by2
?)