"Số phù hợp"
Sam có một ý tưởng "tuyệt vời" để nén! Bạn có thể giúp?
Đây là một bản tóm tắt của sơ đồ nén của Sam. Trước tiên, hãy lấy một đại diện cơ sở 10 của bất kỳ số tự nhiên nào nhỏ hơn 2 ^ 16 và viết nó dưới dạng một chuỗi nhị phân mà không có bất kỳ số 0 đứng đầu nào.
1 -> 1 9 -> 1001 15 -> 1111 13 -> 1101 16 -> 10000 17 -> 10001 65535 -> 1111111111111111
Bây giờ thay thế bất kỳ nhóm nào của một hoặc nhiều số không bằng một số không. Điều này là do số lượng đã nhận được gầy hơn. Chuỗi nhị phân của bạn bây giờ sẽ trông như thế này.
1 -> 1 -> 1 9 -> 1001 -> 101 15 -> 1111 -> 1111 13 -> 1101 -> 1101 16 -> 10000 -> 10 17 -> 10001 -> 101 65535 -> 1111111111111111 -> 111111111111111
Bây giờ bạn chuyển đổi chuỗi nhị phân trở lại đại diện cơ sở 10 và xuất nó ở bất kỳ định dạng nào được chấp nhận. Dưới đây là trường hợp thử nghiệm của bạn. Số nguyên đầu tiên đại diện cho một đầu vào và số nguyên cuối cùng đại diện cho một đầu ra. Lưu ý rằng một số số không thay đổi và do đó có thể được gọi là "phù hợp"
1 -> 1 -> 1 -> 1 9 -> 1001 -> 101 -> 5 15 -> 1111 -> 1111 -> 15 13 -> 1101 -> 1101 -> 13 16 -> 10000 -> 10 -> 2 17 -> 10001 -> 101 -> 5 65535 -> 1111111111111111 -> 1111111111111111 -> 65535 65000 -> 1111110111101000 -> 11111101111010 -> 16250
Bạn có thể sử dụng bất kỳ ngôn ngữ nào, nhưng xin lưu ý rằng Sam ghét những sơ hở tiêu chuẩn. Đây là mã golf, do đó mã có thể càng ngắn càng tốt để nhường chỗ cho các số "nén".
Lưu ý: Đây KHÔNG phải là sơ đồ nén chấp nhận được. Sử dụng điều này sẽ nhanh chóng khiến bạn bị sa thải.
Cần trích dẫn: Tôi không lấy tín dụng cho khái niệm này. Điều này xuất phát từ blog của @Conor O 'Brien ở đây xem OEIS này về các số phù hợp. https://oeis.org/A090078
10000
?