Натхненний запитанням у Stack Overflow .
Враховуючи не порожній масив цілих чисел x
і додатне ціле число n
, обчисліть суму кожного ковзаючого блоку довжини n
вздовж масиву x
, кругово заповнивши пропущені значення ліворуч значеннями праворуч наступним чином:
- перший блок містить перший запис
x
, якому передуютьn-1
кругові зміщені записи; - другий блок має перший і другий записи
x
, яким передуютьn-2
кругові зміщені записи; і так далі.
Вихідний масив y
має той же розмір, що і x
. Можна n
перевищити довжину x
, а потім значення x
циркулярно повторно використовувати в кілька разів .
Приклади
Приклад 1 (значення використовуються лише один раз)
x = [2, 4, -3, 0, -4]
n = 3
дають як вихід
y = [-2, 2, 3, 1, -7]
де
-2
- сума блоку[0, -4, 2]
(перші два значення походять від кругового зсуву)2
- сума[-4, 2, 4]
(перше значення походить від кругового зсуву)3
- це сума[2, 4, -3]
(більше не потрібно круговий зсув)1
- це сума[4, -3, 0]
-7
- це сума[-3, 0, -4]
.
Приклад 2 (значення повторно використовуються кілька разів)
x = [1, 2]
n = 5
давати
y = [7, 8]
де
7
- сума блоку[1, 2, 1, 2, 1]
(перші чотири значення були кругово використані)8
- сума блоку[2, 1, 2, 1, 2]
(перші три значення були кругово використані)
Додаткові правила
- Алгоритм повинен працювати для масивів довільного розміру та для довільних цілих значень. Це прийнятно, якщо програма обмежена типом даних або обмеженнями пам’яті; але слід обробляти як позитивні, так і негативні цілі значення.
- Введення / вихід можна приймати / виробляти будь-якими розумними способами .
- Програми або функції дозволені на будь- якій мові програмування . Стандартні лазівки заборонені.
- Виграє найкоротший код у байтах.
Тестові справи
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]