Você coleciona dados de um Advanced Collecting Device Controller ™ há muito tempo. Você verifica os logs e, para seu horror, descobre que algo deu muito errado: os dados contêm apenas os últimos bits dos números!
Felizmente, você sabe o valor inicial e que o valor nunca muda rapidamente. Isso significa que você pode recuperar o resto apenas encontrando a distância desde o início.
Desafio
Você escreverá um programa ou uma função para calcular a quantidade que um valor mudou, dado um módulo N
e uma lista do módulo de valores intermediários N
.
A mudança entre cada par de números é sempre menor queN/2
, portanto, haverá apenas uma resposta válida para cada caso de teste.
Você receberá como entrada um número inteiro N
> 2 e uma lista de valores, em um formato de sua escolha. A entrada pode ser fornecida via STDIN ou linha de comando ou argumentos de função.
Você produzirá um único inteiro, a quantidade que o valor original mudou. A saída pode ser impressa em STDOUT ou retornada.
Regras
- Seu programa deve funcionar para qualquer distância e módulo menor que
2^20
. - Você pode assumir que:
N
é pelo menos3
.- A lista possui pelo menos 2 valores.
- Todos os valores na lista são pelo menos 0 e menores que
N
. - Todas as alterações nos números são menores que
N/2
.
- Qualquer outra coisa é uma entrada inválida, e seu programa pode fazer o que quiser.
- São proibidas brechas padrão, quaisquer bibliotecas não padrão e funções internas para esse fim exato.
- Isso é código-golfe , então o programa mais curto em bytes vence.
Casos de teste de exemplo
Entrada:
3
0 1 2 2 0 1 0 2 1 2 0 1 2 1 1
Resultado:
4
Explicação (com valor de exemplo):
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
Resultado:
-10
Explicação (com valor de exemplo):
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 muito pequeno)
6
2 5 4 2
(alteração muito grande entre 2 e 5)
:^;[5 2 8 9 5](\
?