Anda telah mengumpulkan data dari Advanced Collecting Device Controller ™ sejak lama. Anda memeriksa log, dan Anda terkejut menemukan sesuatu yang sangat salah: data hanya berisi bit terakhir dari angka!
Untungnya, Anda tahu nilai awalnya dan bahwa nilainya tidak pernah berubah dengan cepat. Itu berarti Anda dapat memulihkan sisanya hanya dengan mencari jarak dari awal.
Tantangan
Anda akan menulis sebuah program atau fungsi untuk menghitung jumlah nilai yang telah berubah, diberikan modulus N
dan daftar nilai-nilai menengah moduloN
.
Perubahan antara setiap pasangan angka selalu kurang dariN/2
, jadi hanya akan ada satu jawaban yang valid untuk setiap kasus uji.
Anda akan diberikan sebagai input integer N
> 2 dan daftar nilai, dalam format pilihan Anda. Input dapat diberikan melalui STDIN atau baris perintah atau argumen fungsi.
Anda akan menghasilkan bilangan bulat tunggal, jumlah nilai aslinya telah berubah. Output dapat dicetak ke STDOUT atau dikembalikan.
Aturan
- Program Anda harus bekerja untuk jarak apa pun dan modulus kurang dari
2^20
. - Anda dapat berasumsi bahwa:
N
setidaknya3
.- Daftar memiliki setidaknya 2 nilai.
- Semua nilai dalam daftar setidaknya 0 dan kurang dari
N
. - Semua perubahan dalam angka kurang dari
N/2
.
- Yang lainnya adalah input yang tidak valid, dan program Anda dapat melakukan apa pun yang diinginkannya.
- Celah standar, semua perpustakaan non-standar, dan fungsi bawaan untuk tujuan yang tepat ini dilarang.
- Ini adalah kode-golf , jadi program terpendek dalam byte menang.
Contoh kasus uji
Memasukkan:
3
0 1 2 2 0 1 0 2 1 2 0 1 2 1 1
Keluaran:
4
Penjelasan (dengan nilai contoh):
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
Memasukkan:
10
5 2 8 9 5
Keluaran:
-10
Penjelasan (dengan nilai contoh):
Value mod 10: 5 2 8 9 5
Value: 15 12 8 9 5
Input tidak valid:
2
0 0 0 0 0
(modulus terlalu kecil)
6
2 5 4 2
(perubahan terlalu besar antara 2 dan 5)
:^;[5 2 8 9 5](\
?