Tantangan
Diberikan daftar bilangan bulat positif, temukan jika ada permutasi di mana mengambil hingga satu bit dari masing-masing bilangan bulat, angka biner yang terdiri dari semua 1
s dapat dibuat.
Jumlah bit dalam jumlah biner yang dihasilkan sama dengan MSB tertinggi dalam daftar bilangan bulat.
Keluaran
Kode Anda harus menampilkan atau mengembalikan nilai kebenaran / kesalahan yang menunjukkan jika permutasi semacam itu ada.
Contohnya
Benar:
Dengan daftar [4, 5, 2]
, dan representasi binernya [100, 101, 10]
, kita dapat menggunakan bit ketiga, pertama, dan kedua, masing-masing, untuk membuat 111
:
4 -> 100 -> 100 -> 1
5 -> 101 -> 101 -> 1
2 -> 010 -> 010 -> 1
Result 111
Dengan daftar [3, 3, 3]
, semua angka memiliki bit pertama dan kedua ditetapkan sebagai 1
, sehingga kita dapat memilih dengan nomor yang akan dicadangkan:
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 -> 1
3 -> 11 -> 11 ->
Result 11
Falsey:
Dengan daftar [4, 6, 2]
, tidak ada angka yang memiliki bit pertama yang ditetapkan 1
, sehingga angka biner tidak dapat dibuat:
4 -> 100
6 -> 110
2 -> 010
Dengan daftar [1, 7, 1]
, hanya satu nomor yang memiliki bit kedua dan ketiga ditetapkan sebagai 1
, dan nomor tidak dapat dibuat:
1 -> 001
7 -> 111
1 -> 001
Jelas, jika jumlah maksimum set bit melebihi jumlah integer, jumlah hasil tidak akan pernah dapat dibuat.
Uji kasus
Benar:
[1]
[1, 2]
[3, 3]
[3, 3, 3]
[4, 5, 2]
[1, 1, 1, 1]
[15, 15, 15, 15]
[52, 114, 61, 19, 73, 54, 83, 29]
[231, 92, 39, 210, 187, 101, 78, 39]
Falsey:
[2]
[2, 2]
[4, 6, 2]
[1, 7, 1]
[15, 15, 15]
[1, 15, 3, 1]
[13, 83, 86, 29, 8, 87, 26, 21]
[154, 19, 141, 28, 27, 6, 18, 137]
Aturan
Celah standar dilarang. Karena ini adalah kode-golf , entri terpendek menang!
Jawaban:
Jelly , 11 byte
Cobalah online!
Bagaimana itu bekerja
sumber
J , 30 byte
Semua kredit jatuh ke tangan rekan saya Marshall .
Fungsi awalan tersembunyi tanpa nama.
Cobalah online!
(
@
adalah komposisi fungsi)#:
antibase-2|:
mengubah urutan(
...)^:2
terapkan fungsi berikut dua kali:1-
Boolean meniadakan>./
maksimal@
dari$
panjang sumbu{.
ambil (padding dengan nol) dari|:
argumen yang dialihkan+./ .*
"sihir penentu gila" *[:
don't hook (no-op - berfungsi untuk menyusun bagian sebelumnya dengan yang lain)* Dalam kata-kata Marshall.
sumber
JavaScript (ES6),
104...9383 bytePengembalian
0
atau1
.Uji kasus
Tampilkan cuplikan kode
metode
Dengan array input A = [a 0 , a 1 , ..., a N-1 ] , kami mencari permutasi [a p [0] , p [1] , ..., p [N- 1] ] dari A dan bilangan bulat x ≤ N sedemikian rupa sehingga:
Diformat dan dikomentari
sumber
Sekam , 14 byte
Cobalah online!
Penjelasan
sumber
05AB1E ,
232220 byte-1 byte terima kasih kepada Mr.Xcoder
Benar: 1, Salah: 0
Cobalah online!
Penjelasan:
sumber
Bahasa Wolfram (Mathematica) , 65 byte
Cobalah online!
Penjelasan
Kami mulai dengan mengubah semua input ke daftar biner.
Lalu kita pad semua daftar itu dengan nol di sebelah kiri untuk membuat array persegi panjang. Hasilnya disimpan
n
untuk nanti.Yay, brute force, mari kita dapatkan semua kemungkinan permutasi input.
Ini mendapatkan jejak untuk setiap permutasi, yaitu jumlah dari elemen diagonal dalam permutasi. Dengan kata lain, kami menjumlahkan MSB dari angka pertama, MSB di sebelah dari angka kedua dan seterusnya. Jika permutasi valid, semua ini akan menjadi 1 dan akan ada sebanyak 1 detik karena jumlah input terbesar lebar.
Kami mendapatkan jejak maksimum, karena jejak tidak pernah bisa lebih dari permutasi yang valid.
Sisi kanan hanyalah versi golf
Length @ First @ n
, yaitu ia mendapatkan lebar array persegi panjang, dan karenanya lebar nomor input terbesar. Kami ingin memastikan bahwa jejak beberapa permutasi sama dengan ini.sumber
PHP,
255243160 byte-12 byte, mengeluarkan sortir
-83 byte (!) Berkat Titus
Cobalah online!
Mencetak 1 untuk jujur, tidak untuk falsey.
Versi asli ungolfed:
sumber
function f($a,$v=NULL,$b=[]){($v=$v??(1<<log(max($a),2)+1)-1)||die("1");if($p=array_pop($a))while($p-=$i)($b[$i=1<<log($p,2)]|$v<$i)||f($a,$v-$i,[$i=>1]+$b);}
true
:die("1")
→die(!0)
.Lua 5.2, 85 byte
Ini menetapkan x menjadi fungsi yang menerima sejumlah variabel input (diharapkan menjadi bilangan bulat 32 bit), dan mencetak ke stdout baik "benar" atau "salah".
Pemakaian:
sumber
[1,15,3,1]
tampaknya kembali,true
bukanfalse
misalnya. Ini adalah kode Anda, kompilator TIO online. Dua kasus uji lainnya yang gagal adalah[1,7,1]
dan[15,15,15]
. Semua test case lainnya menghasilkan hasil yang benar.PHP, 121 byte
Cobalah online .
kerusakan
sumber
J , 49 byte
Apakah saya perlu menghitung juga 'g =.'? Saya siap menambahkannya.
Kata kerja eksplisit yang panjang kali ini. Saya mencoba yang diam-diam untuk algoritma yang sama, tetapi ternyata lebih lama dan lebih buruk dari ini. Jauh dari solusi Adám.
Penjelasan: (y adalah argumen fungsi yang tepat)
Cobalah online!
sumber
Python 3 ,
126120 byteDisimpan 6 byte karena Tn. Xcoder
Cobalah online!
sumber
[0]+[...]
Tidak ada gunanya bukan?any(g(x[:i]+x[i+1:],n-1)for i in range(len(x))if x[i]&2**n)
harus cukup.Jelly , 17 byte
Tautan monadik yang mengambil daftar angka dan kembali
1
(benar) atau0
(falsey).Cobalah online!
Ini akan habis pada TIO untuk yang terlama dari masing-masing kasus uji.
Bagaimana?
sumber
R ,
247 byte,221 byteCobalah online!
Versi tidak disatukan
Saya menyadari bahwa cek tanpa-baris tidak perlu dengan
drop=F
argumen. Juga menghapus beberapa ruang putih sial.sumber
PHP, 152 byte
Mencetak apa pun untuk false, 1 untuk true.
Tidak Disatukan:
sumber
Jelly , 17 byte
Suite uji.
sumber
C, 79 byte
sumber
try it online
tautan akan bermanfaat.[1, 7, 1]
harus mengembalikan false, dan[52, 114, 61, 19, 73, 54, 83, 29]
harus mengembalikan true