Thử thách
Nhiệm vụ của bạn là mã hóa một số nguyên dưới dạng một chuỗi các ký tự ASCII , sau đó giải mã thành công sau khi chuỗi đã được xáo trộn ngẫu nhiên.
Bạn sẽ viết hai chương trình / chức năng , sẽ được gọi là Bộ mã hóa và Bộ giải mã .
Mã hoá
- Đầu vào: một số nguyên trong phạm vi .
- Output: một chuỗi của ASCII ký tự (không nhất thiết phải in).
Bộ giải mã
- Dữ liệu vào: một hoán vị ngẫu nhiên của chuỗi .
- Đầu ra: số nguyên .
Chấm điểm
Đặt là độ dài tối đa của trên tất cả các giá trị có thể có của . Nếu Bộ mã hóa hoạt động không xác định (được phép, xem bên dưới), thì sẽ là độ dài tối đa của có thể xảy ra (có thể là \ infty ).
Đặt là chiều dài của Bộ mã hóa theo byte và là chiều dài của Bộ giải mã tính bằng byte.
Sau đó, điểm của bạn là .
Chiến thắng được trao cho trình nộp điểm thấp nhất .
Thời gian giới hạn
Có giới hạn thời gian tùy ý là 1 phút đối với thời gian thực hiện của cả Bộ mã hóa và Bộ giải mã cho một mẫu thử nghiệm (nghĩa là một giá trị duy nhất là ).
Mục đích là để tránh giải pháp tìm ra rằng vũ phu mã hóa bằng cách liệt kê tất cả các chuỗi với các thuộc tính nhất định. Nếu giải pháp của bạn làm điều gì đó thông minh hơn thế, rất có thể nó sẽ phù hợp với giới hạn thời gian và sẽ được coi là hợp lệ. Tương tự, nếu nó hoạt động trên TIO đối với một số giá trị được chọn ngẫu nhiên của thì nó sẽ được coi là hợp lệ. Nếu không, tôi sẽ kiểm tra nó trên máy của mình, nhưng lưu ý rằng nếu giải pháp của bạn là vũ lực thuần túy thì gần như chắc chắn sẽ thất bại.
Quy tắc
- Bộ mã hóa và Bộ giải mã phải được viết bằng cùng một ngôn ngữ .
- Bộ giải mã phải xuất ra số nguyên chính xác cho mọi hoán vị có thể của chuỗi trả về bởi Bộ mã hóa .
- Các bộ mã hóa và giải mã được không được phép chia sẻ thông tin trong bất kỳ cách nào (ví dụ bằng cách biến toàn cục hoặc các tập tin).
- Đầu ra của bộ mã hóa cần không được xác định (có nghĩa là, cùng một đầu vào có thể tạo ra các chuỗi khác nhau nếu mã hóa được chạy nhiều lần), nhưng Decoder phải luôn luôn đoán nguyên đúng .
- Bộ mã hóa và Bộ giải mã có thể lấy và trả về số nguyên theo bất kỳ cách thuận tiện nào (ví dụ: nếu thì đầu vào là tốt , hoặc ).
14
"14"
[1,4]
- Bộ mã hóa có thể xuất chuỗi bằng cách in trên hoặc bằng cách trả về chuỗi, danh sách / mảng ký tự hoặc danh sách / mảng số nguyên trong phạm vi ; lưu ý rằng Decoder sẽ nhận như là đầu vào một hoán vị của như được trả về bởi các mã hóa , vì vậy nó nên chấp nhận chuỗi trong định dạng tương tự như .
stdout
- Sơ hở tiêu chuẩn bị cấm.
- Nếu có thể, hãy giải thích cách mã của bạn hoạt động và tại sao điểm bạn yêu cầu là chính xác.
Thí dụ
Giả sử .
- Bộ mã hóa nhận
14
làm đầu vào. Nó có thể đầu ra"qwerty"
.- Bộ giải mã nhận được một hoán vị
"qwerty"
là đầu vào, ví dụ"tweyqr"
. Nó phải xuất ra14
(ở bất kỳ định dạng thuận tiện).
Bộ mã hóa cũng có thể đã trở lại [113,119,101,114,116,121]
, trong trường hợp đó Bộ giải mã sẽ nhận được (ví dụ) [116,119,101,121,113,114]
.
Lưu ý rằng chuỗi được trả về bởi Bộ mã hóa cũng có thể bao gồm các ký tự ASCII không in được (nhưng luôn nằm trong phạm vi [0x00, ..., 0x7F]
).