Cách mã hóa hoạt động
Đưa ra một danh sách các bit:
- Giữ một số nguyên tố (bắt đầu bằng
2
) - Có một danh sách
- Đối với mỗi bit trong đầu vào
- Nếu nó giống với bit trước đó, hãy thêm số nguyên tố bạn đang giữ vào danh sách
- Nếu nó khác, giữ nguyên tố tiếp theo và thêm nó vào danh sách
- Trả lại sản phẩm của tất cả các số trong danh sách của bạn
- Đối với bit đầu tiên, giả sử bit trước đó là
0
Lưu ý: các bước này chỉ nhằm mục đích minh họa, bạn không bắt buộc phải tuân theo chúng.
Ví dụ
Input: 001
hold 2
0: add 2 to the list
0: add 2 to the list
1: hold 3, add 3 to the list
list: 2,2,3
Output: 12
Input: 1101
hold 2
1: hold 3, add 3 to the list
1: add 3 to the list
0: hold 5, add 5 to the list
1: hold 7, add 7 to the list
list: 3,3,5,7
Output: 315
Một số ví dụ khác:
000000000 -> 512
111111111 -> 19683
010101010 -> 223092870
101010101 -> 3234846615
011101101 -> 1891890
000101101010010000 -> 3847834029582062520
Thử thách
Viết một bộ mã hóa và bộ giải mã cho phương thức mã hóa này.
(Bộ giải mã đảo ngược quá trình của bộ mã hóa).
Đầu ra đầu vào
Bộ mã hóa có thể lấy đầu vào ở bất kỳ định dạng hợp lý nào
Bộ mã hóa phải xuất ra một số nguyên hoặc một chuỗi
Bộ giải mã phải nhận đầu vào theo cùng định dạng mà bộ mã hóa mở ra
Bộ giải mã phải xuất định dạng giống như bộ mã hóa làm đầu vào
Nói cách khác decoder( encoder( input ) ) === input
Ghi chú
- Bộ giải mã có thể cho rằng đầu vào của nó có thể giải mã được
- Câu trả lời của bạn chỉ có để đối phó với các số nguyên mà ngôn ngữ của bạn natively có thể hỗ trợ mà không sử dụng (
long
,bigInt
, vv), là hợp lý, nếu bạn ngôn ngữ duy nhất hỗ trợ ints lên đến 1, có thể xem xét lại đăng câu trả lời
Chấm điểm
Điểm của bạn là tổng độ dài tính bằng byte của bộ mã hóa và bộ giải mã.
Nếu bạn cần nhập một mô-đun, việc nhập chỉ có thể được tính một lần với điều kiện là bộ mã hóa và bộ giải mã của bạn có thể cùng tồn tại trong cùng một tệp và được sử dụng lại (như các hàm).
Lỗ hổng mặc định bị cấm.
Đây là môn đánh gôn, vì vậy điểm số ngắn nhất cho mọi ngôn ngữ sẽ chiến thắng.