किसी सरणी के अंदर रन ढूंढें
एक रन को तीन या अधिक संख्याओं के रूप में परिभाषित किया जाता है जो एक स्थिर कदम के साथ पिछले से वृद्धि करते हैं। उदाहरण के लिए [1,2,3] चरण 1 के साथ एक रन होगा, [1,3,5,7] चरण 2 के साथ एक रन होगा, और [1,2,4,5] एक रन नहीं है।
हम इन रन को संकेतन "i to j by s" द्वारा व्यक्त कर सकते हैं, जहाँ मैं रन की पहली संख्या है, j रन की अंतिम संख्या है, और s स्टेप है। हालांकि, चरण 1 के रन "i to j" व्यक्त किए जाएंगे।
तो पहले सरणियों का उपयोग करते हुए, हमें मिलता है:
[1,2,3] -> "1to3"
[1,3,5,7] -> "1to7by2"
[1,2,4,5] -> "1 2 4 5"
इस चुनौती में, एरर्स के लिए ऐसा करना आपका काम है जिसमें कई रन हो सकते हैं।
उदाहरण पुनरावृत्ति के साथ पायथन कोड:
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)
इनपुट
सॉर्ट किए गए पॉजिटिव इन्टर्स का एरियर (कोई डुप्लिकेट नहीं)
उत्पादन
एक स्थान, या रन के एक स्ट्रिंग सरणी द्वारा अलग किए गए रनों का स्ट्रिंग
किसी विशेष दिशा में लालची होने की आवश्यकता नहीं है
व्हाट्सएप को पीछे छोड़ सकता है
परीक्षण के मामलों
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"
यह कोड-गोल्फ है इसलिए कम से कम बाइट्स जीतता है।
[4, 5, 6, 7, 9, 11, 13, 15]नहीं हो सकता 4to6 7to15by2?)