Zainspirowany pytaniem w Stack Overflow .
Biorąc pod uwagę niepustą tablicę liczb całkowitych x
i dodatnią liczbę całkowitą n
, oblicz sumę każdego przesuwającego się bloku długości n
wzdłuż tablicy x
, wypełniając cyklicznie brakujące wartości po lewej stronie wartościami z prawej strony w następujący sposób:
- pierwszy blok zawiera pierwszy wpis
x
poprzedzonyn-1
przesuniętymi kołowo wpisami; - drugi blok ma pierwszy i drugi wpis
x
poprzedzonyn-2
okrągłym przesunięciem wpisów; i tak dalej.
Tablica wyjściowa y
ma taki sam rozmiar jak x
. Możliwe jest n
przekroczenie długości x
, a następnie wartości x
są kilkakrotnie ponownie używane w obiegu .
Przykłady
Przykład 1 (wartości są ponownie używane tylko raz)
x = [2, 4, -3, 0, -4]
n = 3
podać jako wynik
y = [-2, 2, 3, 1, -7]
gdzie
-2
jest sumą bloku[0, -4, 2]
(pierwsze dwie wartości pochodzą z przesunięcia kołowego)2
jest sumą[-4, 2, 4]
(pierwsza wartość pochodzi z przesunięcia kołowego)3
jest sumą[2, 4, -3]
(nie trzeba już przesuwać kołowo)1
jest sumą[4, -3, 0]
-7
jest sumą[-3, 0, -4]
.
Przykład 2 (wartości są wielokrotnie używane)
x = [1, 2]
n = 5
dać
y = [7, 8]
gdzie
7
jest sumą bloku[1, 2, 1, 2, 1]
(pierwsze cztery wartości zostały ponownie wykorzystane cyklicznie)8
jest sumą bloku[2, 1, 2, 1, 2]
(pierwsze trzy wartości zostały ponownie wykorzystane cyklicznie)
Dodatkowe zasady
- Algorytm powinien działać dla tablic o dowolnym rozmiarze i dla dowolnych wartości całkowitych. Jest dopuszczalne, jeśli program jest ograniczony typem danych lub ograniczeniami pamięci; ale należy obsługiwać zarówno dodatnie, jak i ujemne wartości całkowite.
- Dane wejściowe / wyjściowe można przyjmować / wytwarzać dowolnymi rozsądnymi środkami .
- Programy lub funkcje są dozwolone w dowolnym języku programowania . Standardowe luki są zabronione.
- Najkrótszy kod w bajtach wygrywa.
Przypadki testowe
x, n, -> y
[2, 4, -3, 0, -4], 3 -> [-2, 2, 3, 1, -7]
[1, 2], 5 -> [7, 8]
[2], 7 -> [14]
[-5, 4, 0, 1, 0, -10, -4], 4 -> [-19, -15, -5, 0, 5, -9, -13]
[-5, 4, 0, 1, 0, -10, -4], 1 -> [-5, 4, 0, 1, 0, -10, -4]
[-2, -1, 0, 1, 2, 3], 5 -> [4, 3, 2, 1, 0, 5]
[-10, 0, 10], 4 -> [-10, 0, 10]