Od dłuższego czasu zbierasz dane z Advanced Collecting Device Controller ™ . Sprawdzasz dzienniki i ku swojemu przerażeniu odkrywasz, że coś poszło nie tak: dane zawierają tylko ostatnie bity liczb!
Na szczęście znasz wartość początkową i ta wartość nigdy się nie zmienia szybko. Oznacza to, że możesz odzyskać resztę, znajdując odległość od początku.
Wyzwanie
Napisz program lub funkcję do obliczenia kwoty, którą zmieniła wartość, biorąc pod uwagę moduł Ni listę wartości pośrednich modulo N.
Zmiana między każdą parą liczb jest zawsze mniejsza niżN/2 , więc dla każdego przypadku testowego będzie tylko jedna poprawna odpowiedź.
Jako dane wejściowe otrzymasz liczbę całkowitą N> 2 i listę wartości, w wybranym przez ciebie formacie. Dane wejściowe można podawać za pomocą argumentów STDIN, wiersza polecenia lub funkcji.
Wyprowadzisz jedną liczbę całkowitą, kwotę, którą zmieniła pierwotna wartość. Dane wyjściowe można wydrukować do STDOUT lub zwrócić.
Zasady
- Twój program musi działać dla dowolnej odległości i modułu mniejszej niż
2^20. - Możesz założyć, że:
Njest przynajmniej3.- Lista ma co najmniej 2 wartości.
- Wszystkie wartości na liście wynoszą co najmniej 0 i mniej niż
N. - Wszystkie zmiany liczb są mniejsze niż
N/2.
- Cokolwiek innego jest niepoprawnym wejściem, a Twój program może robić, co chce.
- Standardowe luki, niestandardowe biblioteki i wbudowane funkcje do tego konkretnego celu są zabronione.
- To jest golf golfowy , więc wygrywa najkrótszy program w bajtach.
Przykładowe przypadki testowe
Wejście:
3
0 1 2 2 0 1 0 2 1 2 0 1 2 1 1
Wynik:
4
Objaśnienie (z przykładową wartością):
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
Wejście:
10
5 2 8 9 5
Wynik:
-10
Objaśnienie (z przykładową wartością):
Value mod 10: 5 2 8 9 5
Value: 15 12 8 9 5
Nieprawidłowe dane wejściowe:
2
0 0 0 0 0
(zbyt mały moduł)
6
2 5 4 2
(zbyt duża zmiana między 2 a 5)
:^;[5 2 8 9 5](\?