Trong thử thách này, bạn sẽ được yêu cầu thực hiện bất kỳ chức năng (hoặc chương trình đầy đủ) nào đáp ứng hai thuộc tính. Những tính chất đó là:
Hàm của bạn phải là hàm tiêm (có thể đảo ngược) từ đa thức với các hệ số nguyên không âm sang các số nguyên không âm. Điều này có nghĩa là không có hai đầu vào không bằng nhau có thể ánh xạ tới một đầu ra bằng nhau.
Hàm của bạn phải bảo toàn tổng số "trên bit" từ đầu vào đến đầu ra của nó. Điều này có nghĩa là nếu bạn đếm 1 bit của mỗi hệ số của đa thức, tổng của chúng sẽ bằng với số lượng 1 bit trong biểu diễn nhị phân của đầu ra. Ví dụ
9
là1001
ở dạng nhị phân nên nó có 21
bit.
Tôi
Một đa thức số nguyên không âm giống như một danh sách vô hạn các số nguyên không âm sao cho sau một điểm nhất định tất cả các số nguyên đều bằng không. Do đó, đa thức có thể được biểu diễn bằng danh sách vô hạn (mặc dù điều này có thể là không mong muốn) hoặc bằng danh sách hữu hạn với các số 0 ẩn sau khi kết thúc danh sách.
Điểm khác biệt chính giữa đa thức và danh sách hữu hạn là việc thêm số 0 vào cuối danh sách sẽ thay đổi danh sách:
Trong khi việc thêm số 0 vào cuối đa thức không làm thay đổi giá trị của nó:
Do đó, nếu hàm của bạn lấy một danh sách hữu hạn đại diện cho đa thức làm đầu vào, việc thêm số 0 không được thay đổi kết quả của nó.
Khi biểu diễn đa thức dưới dạng danh sách, bạn có thể biểu thị chúng bằng mục nhập đầu tiên hoặc cuối cùng đại diện cho số hạng không đổi. Ví dụ: bạn có thể có một trong các khả năng sau:
Trong trường hợp đầu tiên, việc thêm số không vào cuối danh sách sẽ không thay đổi kết quả; trong trường hợp thứ hai, việc thêm số không vào phía trước danh sách sẽ không thay đổi kết quả.
Tất nhiên, nếu ngôn ngữ của bạn hỗ trợ đa thức, bạn có thể lấy chúng làm đầu vào.
Đầu ra phải là đầu ra số nguyên không âm thông qua bất kỳ phương thức tiêu chuẩn nào.
Đây là môn đánh gôn, vì vậy câu trả lời sẽ được tính bằng byte, với ít byte hơn sẽ tốt hơn.
[]
hoặc[0]
một đầu vào hợp lệ?