Code bij Superieure Streak
De scores:
scores = [6, -7, 5, -3, 8, -6, 9, -4, 7, -5, 4, -8]
Het programma van Mu:
streak = 0 # beste score tot nu toe for i in range(len(scores)): # i = begin van periode for j in range(i, len(scores)): # j = einde van periode totaal = sum(scores[i:j+1]) # totaal = som over periode streak = max(streak, totaal)
Het programma van Milli:
streak = 0 # beste score tot nu toe teller = 0 # aantal stappen tot nu toe for i in range(len(scores)): # i = begin van periode totaal = 0 # som over periode for j in range(i, len(scores)): # j = einde van periode totaal = totaal + scores[j] # totaal = som over periode teller = teller + 1 streak = max(streak, totaal)
Het verbeterde programma van Mu:
def streak_binair(scores, i, j): """Bepaal streak en telling voor scores[i:j] met i < j. """ if i + 1 == j: # één score return scores[i], 1 # splits de scores in i:m en m:j m = (i + j)//2 # midden: i < m < j s_links, t_links = streak_binair(scores, i, m) s_rechts, t_rechts = streak_binair(scores, m, j) teller = t_links + t_rechts # bepaal beste staart links totaal = 0 # som scores[k:m] staart = 0 # score beste staart for k in range(m - 1, i - 1, -1): # k = begin van staart totaal = totaal + scores[k] staart = max(staart, totaal) teller = teller + 1 # bepaal beste begin rechts totaal = 0 # som scores[m:k] begin = 0 # score beste begin for k in range(m , j): # k = einde van begin totaal = totaal + scores[k] begin = max(begin, totaal) teller = teller + 1 mid = staart + begin return max(s_links, s_rechts, mid), teller
Het verbeterde programma van Milli:
streak, staart = 0, 0 for v in scores staart = max(0, staart + v) streak = max(streak, staart)