Вы уже давно собираете данные с Advanced Collecting Device Controller ™ . Вы проверяете журналы и, к своему ужасу, обнаруживаете, что что-то пошло не так: данные содержат только последние биты цифр!
К счастью, вы знаете начальное значение и оно никогда не меняется быстро. Это означает, что вы можете восстановить остальное, просто найдя расстояние от начала.
Вызов
Вы напишите программу или функцию для расчета суммы, на которую было изменено значение, с учетом модуля 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](\
?