Tehtäväsi on laskea lukuja sisältävälle listalle jokaisen tietyn kokoisen osalistan lukujen summa vasemmalta oikealle.
Esimerkiksi kun lista on [1,2,3,4,5] ja osalistan koko on 3, osalistat ovat [1,2,3], [2,3,4] ja [3,4,5]. Näiden osalistojen summat ovat 6, 9 ja 12.
Toteuta tiedostoon listsum.py
funktio find_sums
, joka palauttaa listan osalistojen summat listana. Funktiolle annetaan lista lukuja sekä osalistan koko.
Sinun tulee suunnitella tehokas ratkaisu, jossa ei tarvitse muodostaa erikseen jokaista osalistaa ja laskea sen lukujen summaa. Parempi tapa on hyödyntää edellisen osalistan summaa, kun lasket seuraavan osalistan summan.
Seuraavassa koodipohjassa viimeisessä testissä listassa on 10^5 lukua ja osalistan koko on 10^4. Funktiosi tulee toimia tehokkaasti tässäkin tapauksessa.
def find_sums(numbers, size): # TODO if __name__ == "__main__": print(find_sums([1], 1)) # [1] print(find_sums([1, 8, 2, 7, 3, 6, 4, 5], 6)) # [27, 30, 27] print(find_sums([1, 2, 3, 4, 5], 1)) # [1, 2, 3, 4, 5] print(find_sums([1, 2, 3, 4, 5], 2)) # [3, 5, 7, 9] print(find_sums([1, 2, 3, 4, 5], 3)) # [6, 9, 12] print(find_sums([1, 2, 3, 4, 5], 4)) # [10, 14] print(find_sums([1, 2, 3, 4, 5], 5)) # [15] numbers = list(range(10**5)) sums = find_sums(numbers, 10**4) print(sums[5]) # 50045000 print(sums[42]) # 50415000 print(sums[1337]) # 63365000