Trouver les pistes à l'intérieur d'un tableau
Une exécution est définie comme trois nombres ou plus qui incrémentent le précédent avec un pas constant. Par exemple, [1,2,3] serait une exécution avec l'étape 1, [1,3,5,7] serait une exécution avec l'étape 2 et [1,2,4,5] n'est pas une exécution.
Nous pouvons exprimer ces exécutions par la notation "i à j par s" où i est le premier numéro de l'analyse, j est le dernier numéro de l'analyse et s est l'étape. Cependant, les exécutions de l'étape 1 seront exprimées "i à j".
Donc, en utilisant les tableaux avant, nous obtenons:
[1,2,3] -> "1to3"
[1,3,5,7] -> "1to7by2"
[1,2,4,5] -> "1 2 4 5"
Dans ce défi, c'est votre tâche de le faire pour les tableaux qui peuvent avoir plusieurs exécutions.
Exemple de code Python avec récursivité:
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)
Contribution
Tableau d'entrées positives triées (pas de doublons)
Production
Chaîne des exécutions séparées par un espace ou un tableau de chaînes des exécutions
N'a pas besoin d'être gourmand dans une direction particulière
Peut avoir un espace de fin
Cas de test
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"
C'est le code-golf donc le moins d'octets gagne.
[4, 5, 6, 7, 9, 11, 13, 15]
ne peut pas l'être 4to6 7to15by2
?)