Ви тривалий час збираєте дані з розширеного контролера збираючого пристрою ™ . Ви перевіряєте журнали, і на свій жах ви виявляєте, що щось пішло жахливо не так: дані містять лише останні біти цифр!
На щастя, ви знаєте початкове значення і що значення ніколи не змінюється швидко. Це означає, що ви можете відновити решту, просто знайшовши відстань від початку.
Виклик
Ви напишете програму або функцію для обчислення суми, яку значення змінило, задавши модуль N
і список модуля проміжних значень N
.
Зміна між кожною парою чисел завжди меншаN/2
, тому для кожного тестового випадку буде лише одна дійсна відповідь.
Вам буде введено ціле число N
> 2 та список значень у форматі на ваш вибір. Введення може бути надано через STDIN або аргументи командного рядка або функції.
Ви виведете одне ціле число, сума початкового значення змінилася. Вихід може бути надрукований в STDOUT або повернутий.
Правила
- Ваша програма повинна працювати на будь-яку відстань і модуль менше, ніж
2^20
. - Ви можете припустити, що:
N
принаймні3
.- Список має щонайменше 2 значення.
- Усі значення у списку принаймні 0 та менше
N
. - Усі зміни чисел менше, ніж
N/2
.
- Все інше недійсне введення, і ваша програма може робити все, що завгодно.
- Стандартні лазівки, будь-які нестандартні бібліотеки та вбудовані функції для цієї мети заборонені.
- Це код-гольф , тому виграє найкоротша програма в байтах.
Приклади тестових випадків
Вхід:
3
0 1 2 2 0 1 0 2 1 2 0 1 2 1 1
Вихід:
4
Пояснення (із прикладом значення):
Value mod 3: 0 1 2 2 0 1 0 2 1 2 0 1 2 1 1
Value: 0 1 2 2 3 4 3 2 1 2 3 4 5 4 4
Вхід:
10
5 2 8 9 5
Вихід:
-10
Пояснення (із прикладом значення):
Value mod 10: 5 2 8 9 5
Value: 15 12 8 9 5
Недійсні входи:
2
0 0 0 0 0
(занадто малий модуль)
6
2 5 4 2
(занадто велика зміна між 2 і 5)
:^;[5 2 8 9 5](\
?