... Ah maaf, tidak ada popcorn di sini, hanya POPCNT.
Tulis program atau fungsi terpendek yang mengambil angka ndan mengeluarkan semua bilangan bulat dari 0 hingga 2 n - 1, dengan urutan jumlah 1 bit dalam representasi biner angka (popcount). Duplikat tidak diizinkan.
Urutan angka dengan popcount yang sama ditentukan implementasi.
Misalnya, untuk n = 3, semua output ini valid:
0, 1, 2, 4, 3, 5, 6, 7
[0, 4, 1, 2, 5, 3, 6, 7]
0 4 2 1 6 5 3 7
Format input dan output ditentukan oleh implementasi untuk memungkinkan penggunaan fitur-fitur bahasa untuk menambah kode. Ada beberapa batasan pada output:
- Angka-angka harus berupa output dalam format desimal.
Output harus mengandung pemisah yang masuk akal di antara angka-angka (trailing separator diperbolehkan, tetapi tidak mengarah).
Line feed (
\n), tab (\t), ruang,,,.,;,|,-,_,/yang separator cukup masuk akal. Saya tidak keberatan ruang tambahan untuk pencetakan cantik, tetapi jangan gunakan huruf atau angka sebagai pemisah.- Angka dan pemisah dapat dikelilingi oleh
[ ],{ }atau setiap array atau notasi daftar. - Jangan cetak apa pun yang tidak disebutkan di atas.
Bonus
Lipat gandakan skor Anda dengan 0,5 jika solusi Anda dapat menghasilkan angka dengan cepat. Inti dari bonus ini adalah jika Anda mengkonversi secara langsung solusi pencetakan Anda menjadi generator, generator hanya menggunakan paling banyak memori O (n) di mana n adalah jumlah bit seperti yang didefinisikan di atas. (Anda tidak harus benar-benar mengubah solusi Anda menjadi generator). Perhatikan bahwa sementara saya memaksakan n <= 28, memori yang diperlukan untuk menyimpan semua angka masih tumbuh secara eksponensial, dan solusi pengurutan yang naif akan memakan setidaknya 4 GB memori pada n = 28.
Harap tambahkan beberapa penjelasan sederhana tentang cara kerja solusi Anda sebelum mengklaim bonus ini.