Ha estado recolectando datos de un Advanced Collecting Device Controller ™ durante mucho tiempo. Revisas los registros y, para tu horror, descubres que algo ha salido terriblemente mal: ¡los datos solo contienen los últimos bits de los números!
Afortunadamente, sabes el valor inicial y que el valor nunca cambia rápidamente. Eso significa que puede recuperar el resto simplemente encontrando la distancia desde el principio.
Desafío
Escribirás un programa o una función para calcular la cantidad que ha cambiado un valor, dado un módulo N
y una lista de los módulos de valores intermedios N
.
El cambio entre cada par de números siempre es menor queN/2
, por lo que solo habrá una respuesta válida para cada caso de prueba.
Se le dará como entrada un número entero N
> 2 y una lista de valores, en el formato que elija. La entrada puede darse a través de STDIN o la línea de comando o argumentos de función.
Producirá un solo entero, la cantidad que ha cambiado el valor original. La salida puede imprimirse en STDOUT o devolverse.
Reglas
- Su programa debe funcionar para cualquier distancia y módulo menor que
2^20
. - Puede suponer que:
N
es por lo menos3
.- La lista tiene al menos 2 valores.
- Todos los valores en la lista son al menos 0 y menores que
N
. - Todos los cambios en los números son menores que
N/2
.
- Cualquier otra cosa es una entrada no válida, y su programa puede hacer lo que quiera.
- Las lagunas estándar, las bibliotecas no estándar y las funciones integradas para este propósito exacto están prohibidas.
- Este es el código de golf , por lo que gana el programa más corto en bytes.
Ejemplos de casos de prueba
Entrada:
3
0 1 2 2 0 1 0 2 1 2 0 1 2 1 1
Salida:
4
Explicación (con valor de ejemplo):
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
Entrada:
10
5 2 8 9 5
Salida:
-10
Explicación (con valor de ejemplo):
Value mod 10: 5 2 8 9 5
Value: 15 12 8 9 5
Entradas inválidas:
2
0 0 0 0 0
(módulo demasiado pequeño)
6
2 5 4 2
(cambio demasiado grande entre 2 y 5)
:^;[5 2 8 9 5](\
?