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 Ny 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:
Nes 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](\?