Bạn đã thu thập dữ liệu từ Bộ điều khiển thiết bị thu thập nâng cao ™ trong một thời gian dài. Bạn kiểm tra nhật ký và đến nỗi kinh hoàng bạn phát hiện ra rằng có điều gì đó đã sai lầm khủng khiếp: dữ liệu chỉ chứa các bit cuối cùng của các con số!
May mắn thay, bạn biết giá trị bắt đầu và giá trị đó không bao giờ thay đổi nhanh chóng. Điều đó có nghĩa là bạn có thể phục hồi phần còn lại bằng cách chỉ cần tìm khoảng cách từ đầu.
Thử thách
Bạn sẽ viết một chương trình hoặc một hàm để tính toán số lượng giá trị đã thay đổi, đưa ra một mô-đun N
và một danh sách các giá trị trung gian modulo N
.
Sự thay đổi giữa mỗi cặp số luôn nhỏ hơnN/2
, do đó sẽ chỉ có một câu trả lời hợp lệ cho mỗi trường hợp kiểm tra.
Bạn sẽ được cung cấp dưới dạng đầu vào số nguyên N
> 2 và danh sách các giá trị, theo định dạng bạn chọn. Đầu vào có thể được cung cấp thông qua STDIN hoặc dòng đối số hoặc đối số chức năng.
Bạn sẽ xuất một số nguyên duy nhất, số tiền giá trị ban đầu đã thay đổi. Đầu ra có thể được in ra STDOUT hoặc trả lại.
Quy tắc
- Chương trình của bạn phải làm việc cho bất kỳ khoảng cách và mô đun nhỏ hơn
2^20
. - Bạn có thể cho rằng:
N
là ít nhất3
.- Danh sách có ít nhất 2 giá trị.
- Tất cả các giá trị trong danh sách ít nhất là 0 và nhỏ hơn
N
. - Tất cả các thay đổi trong số ít hơn
N/2
.
- Bất cứ điều gì khác là một đầu vào không hợp lệ, và chương trình của bạn có thể làm bất cứ điều gì nó muốn.
- Các lỗ hổng tiêu chuẩn, bất kỳ thư viện không chuẩn và các hàm tích hợp cho mục đích chính xác này đều bị cấm.
- Đây là môn đánh gôn , vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.
Ví dụ trường hợp kiểm tra
Đầu vào:
3
0 1 2 2 0 1 0 2 1 2 0 1 2 1 1
Đầu ra:
4
Giải thích (với giá trị mẫu):
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
Đầu vào:
10
5 2 8 9 5
Đầu ra:
-10
Giải thích (với giá trị mẫu):
Value mod 10: 5 2 8 9 5
Value: 15 12 8 9 5
Đầu vào không hợp lệ:
2
0 0 0 0 0
(mô đun quá nhỏ)
6
2 5 4 2
(thay đổi quá lớn giữa 2 và 5)
:^;[5 2 8 9 5](\
nào không?