Mô tả công việc
Cho một số nguyên, hoán đổi các bit có ý nghĩa nhỏ nhất (2k của 1) và 2k -th cho tất cả các số nguyên k> 0 . Đây là trình tự A057300 trong OEIS.
(Số này được giả định là có vô số số 0 hàng đầu. Trong thực tế, điều này chỉ có nghĩa là trả trước một số 0 bit cho các số có độ dài lẻ.)
Đây là mã golf , vì vậy mã ngắn nhất (tính bằng byte) sẽ thắng.
Các trường hợp thử nghiệm
0 -> 0
1 -> 2
9 -> 6
85 -> 170
220 -> 236
1827 -> 2835
47525 -> 30298
unsigned char array_of_bytes[1024]
làm việc theo cách bạn mong đợi (tức là một bitfield với CHAR_BIT
các mục 1024 * ). Tuy nhiên, tôi tưởng tượng hầu hết các câu trả lời hỗ trợ các đầu vào có độ dài tùy ý sẽ cho CHAR_BIT
là chẵn, vì việc dịch chuyển các bit giữa các byte rất cồng kềnh. Vì vậy, bạn hoàn toàn có thể đặt yêu cầu hỗ trợ k
lên đến một số kích thước không đổi, như 256 hoặc thứ gì đó hợp lý cho AES và các ngôn ngữ không có loại số nguyên 256 bit sẽ phải sử dụng các vòng lặp. Điều đó có thể khiến các vectơ SIMD đáng để xem xét cho câu trả lời x86 asm: P