Penolakan
Pertanyaan ini bukan duplikat dari pertanyaan ini . Saya tidak menghitung angka tertentu, karena kami sudah menetapkannya di parameter awal. Pertanyaan ini berfokus pada angka desimal yang dapat dibangun dari string biner berdasarkan digit yang disediakan.
Tantangan
Diberikan dua bilangan bulat X
dan Y
, masing-masing mewakili jumlah nol ( 0
) dan satu ( 1
), menghitung semua ekivalen desimal yang mungkin yang dapat ditentukan dari membuat string biner hanya menggunakan nol dan yang disediakan, dan menampilkannya sebagai output.
Contoh 1:
Memasukkan: 0 1
Keluaran: 1
Penjelasan: Hanya satu yang 1
diperhitungkan, yang hanya dapat dikonversi satu arah.
Contoh 2:
Memasukkan: 1 1
Keluaran: 1,2
Penjelasan: 01
convert ke 1, 10
convert ke 2.
Contoh 3:
Memasukkan: 3 2
Keluaran: 3,5,6,9,10,12,17,18,20,24
Penjelasan: Three 0
s dan two 1
s make 00011
(3), 00101
(5), 00110
(6), 01001
(9), 01010
(10), 01100
(12), 10001
(17), 10010
(18), 10100
(20), 11000
(24)
Keterbatasan dan Aturan
- Saya hanya akan mengharapkan kode Anda bekerja di mana
0 < X + Y <= 16
sehingga jumlah maksimum dalam output hanya dapat terjadi dari 161
detik, yaitu parameter0
dan16
. - Sebagai hasil dari batasan di atas, kisaran angka yang kami harapkan dalam output berasal dari
0
dan65535
. - Saya akan menerima fungsi atau kode, selama output yang dihasilkan disediakan, apakah ini daftar yang dipisahkan koma, array, daftar yang di-output ke STDOUT, dll. Satu-satunya kriteria yang harus saya tekankan tentang output adalah bahwa ia harus diurutkan.
- Ini adalah kode golf, byte minimum akan menerima kemuliaan maksimum.
- Kami tidak akan mentolerir celah konyol
0 0
?0 <= X + Y <= 16
, jadi ya, karena0 0
akan dianggap input valid yang memenuhi aturan itu.0 0
? Angka 0 dapat diwakili oleh nol, satu atau lebih nol.Jawaban:
Jelly , 8 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python, 60 byte
Uji di Ideone .
Bagaimana itu bekerja
Semua angka positif yang dapat direpresentasikan dalam biner dengan x nol dan y adalah lebih kecil dari 2 x + y , karena representasi biner kanonik yang terakhir memiliki x + y + 1 digit.
Lambda hanya iterates atas bilangan bulat dalam [0, 2 x + y ) dan membuat semua bilangan bulat n dalam kisaran yang yang memiliki y yang. Sejak n <2 x + y adalah dapat diwakili dengan x (atau kurang) nol.
sumber
Mathematica,
5957 byteHasil yang biasa dengan Mathematica: fungsi tingkat tinggi = baik, nama fungsi panjang = buruk.
Join[0&~Array~#,1&~Array~#2]
membuat daftar dengan jumlah0
s dan1
s yang benar.Permutations
menghasilkan semua permutasi daftar itu, tanpa pengulangan (seperti yang saya pelajari) dan dalam urutan.#+##&~Fold~#
(versi golfuscated#~FromDigits~2
) mengubah daftar digit basis-2 menjadi bilangan bulat yang mereka wakili.Versi sebelumnya, sebelum komentar Martin Ender:
sumber
FromDigits
biasanya dapat dipersingkat:#+##&~Fold~#&/@Permutations...
Select[Range[2^+##]-1,x=#;DigitCount[#,2,1]==x&]&
CJam (
1514 bytes)Ini adalah blok anonim (fungsi) yang mengambil input sebagai array
[number-of-ones number-of-zeros]
dan mengembalikan output sebagai array.Demo online
Jauh dari sasaran, tetapi lebih menarik : ini tanpa builtin permutasi atau konversi basis:
Ini akan berfungsi dengan baik saat GolfScript dibuka.
sumber
ee{)*}/
dengan sesuatu yang menggunakan.*
dan datang dengan solusi 14-byte ini:{As.*s:~e!2fb}
Thes:~
terlihat sedikit tidak efisien sekarang meskipun..*
dan memutuskan bahwaee
itu lebih baik daripada misalnya2,:a.*e_
. Saya tidak menyadari bahwa itue!
akan memberikan hasil yang sama terlepas dari urutan argumennya.Japt , 16 byte
Uji secara online!
Bagaimana itu bekerja
Versi alternatif, 17 byte
Saya sudah mencoba untuk bermain golf kedua versi, tapi saya tidak dapat menemukan ...
sumber
("0".p(U)+"1".p(V)).á().m("n",2)
; masing-masing.x()
fungsi didefinisikan dalam file sumber .Ruby, 63 byte
Implementasi yang sederhana. Saran bermain golf diterima.
Tidak melakukanolf
sumber
Pyth - 11 byte
Test Suite .
sumber
Python 2 -
10599 byte+8 byte karena output kami perlu disortir
sumber
Mathematica, 47 byte
Fungsi yang tidak disebutkan namanya mengambil dua argumen: jumlah
1
s, jumlah0
s.Pada dasarnya port solusi Dennis Python . Kami membuat rentang dari
0
ke dan kemudian hanya menyimpan angka-angka yang jumlah- bitnya sama dengan input pertama. Bit yang paling menarik mungkin adalah yang menggunakan beberapa sihir urutan untuk menghindari tanda kurung di sekitar penambahan dua argumen.2x+y-1
1
2^+##
sumber
MATLAB 57 + 6
jalankan menggunakan
ungolfed
sumber
MATL , 9 byte
Cobalah online!
Penjelasan
Pendekatannya mirip dengan yang ada dalam jawaban Dennis 'Jelly .
sumber
Sebenarnya, 21 byte
Port jawaban Ruby saya . Saran bermain golf diterima. Cobalah online!
Bagaimana itu bekerja
sumber
Groovy 74 Bytes, 93 Bytes atau 123 Bytes
Saya tidak tahu yang mana yang Anda anggap lebih lengkap menjawab pertanyaan tetapi ...
74 Byte Solution
Untuk input 1,2 Anda mendapatkan:
93 Byte Solution
Untuk input 1,2 Anda mendapatkan:
123 Byte Solution
Untuk input 1,2 Anda mendapatkan:
Cobalah di sini:
https://groovyconsole.appspot.com/edit/5143619413475328
sumber
JavaScript (Firefox 48),
8576747170 byteDisimpan 3 byte berkat @Neil.
Pemahaman array sangat bagus. Sayang sekali mereka belum membuatnya menjadi spec ECMAScript resmi.
JavaScript (ES6),
1098779787170 byteHarus berfungsi di semua browser yang mendukung ES6 sekarang. Disimpan 7 byte yang satu ini, juga berkat @Neil.
sumber
undefined
sekarang dengan setiap uji coba yang saya lakukan ...?f=(m,n)=>...
, lalu panggil sepertif(3,2)
. Jika itu yang Anda lakukan, browser apa yang Anda gunakan?eval
versi -less (melakukan hal yang persis sama, tetapi 3 byte lebih lama):(m,n)=>{a="";for(i=0;i<1<<m+n;i++)if(i.toString(2).split(1).length==n+1)a+=i+" ";return a}
Groovy 80 Bytes
berdasarkan jawaban oleh @carusocomputing
solusi 123 Byte-nya dapat dikompresi menjadi 80 Bytes:
80 Byte Solution
Untuk input 1,2 Anda mendapatkan:
sumber
C (gcc) ,
7268 byteCobalah online!
Sayangnya tidak ada popcount () di perpustakaan standar, tetapi disediakan sebagai "fungsi bawaan" oleh GCC. Outputnya diurutkan, tetapi dalam urutan terbalik.
Terima kasih kepada @ceilingcat untuk mencukur 4 byte!
sumber
PHP, 80 atau 63 byte
tergantung pada apakah saya harus menggunakan
$argv
atau dapat menggunakan$x
dan$y
sebagai gantinya.mencetak semua angka yang cocok dalam urutan menurun yang dibatasi oleh garis bawah.
nama file tidak boleh dimulai dengan angka.
tidak ada builtin, 88 atau 71 byte
tambahkan masing-masing satu byte untuk hanya satu garis bawah setelah setiap angka.
@WallyWest: Anda benar. Menghemat 3 byte untuk saya dari
for($i=-1;++$i<...;)
sumber
Perl 6 ,
64 6249 bytePenjelasan:
sumber