Tantangan
Anda diberikan:
- daftar h bilangan bulat positif tidak kosong yang tidak disortir (tumpukan jerami)
- bilangan bulat positif n (jarum)
Tugas Anda adalah mengembalikan daftar semua gabungan desimal unik permutasi dari h yang representasi binernya berisi representasi biner dari n .
Contohnya
h = [1, 2, 3]
n = 65Hanya ada satu rangkaian yang cocok, jadi output yang diharapkan adalah
[321]
.h = [1, 2, 3]
n = 7Kali ini, ada tiga rangkaian yang berisi pola biner 111 . Output yang diharapkan adalah
[123, 231, 312]
.h = [12, 3]
n = 7Hanya dua permutasi yang tersedia dan keduanya cocok. Output yang diharapkan adalah
[123, 312]
.h = [1, 2, 2]
n = 15Satu-satunya gabungan yang cocok adalah 122 ( 1111010 dalam biner, yang berisi 1111 ), sehingga output yang diharapkan adalah
[122]
. Perhatikan bahwa dua permutasi sebenarnya mengarah ke 122 tetapi Anda tidak diizinkan untuk menghasilkan[122, 122]
.
Klarifikasi dan aturan
- Anda dapat menggunakan jarum sebagai integer (
65
), string yang mewakili nilai desimal ("65"
) atau string yang mewakili nilai biner ("1000001"
). - Anda dapat mengambil tumpukan jerami sebagai array / objek / set integer asli (
[11,12,13]
), array / objek / set string asli yang mewakili nilai desimal (["11","12","13"]
), atau string nilai desimal ("11 12 13"
atau"11,12,13"
) yang dibatasi . Anda juga dapat memilih varian menggunakan array angka (seperti[[1,1],[1,2],[1,3]]
). - Output harus mengikuti salah satu format yang dijelaskan di atas untuk tumpukan jerami, tetapi tidak harus yang sama.
- Anda tidak seharusnya menangani tumpukan jerami yang gabungan angka desimalnya lebih tinggi daripada bilangan bulat unsigned representable tertinggi dalam bahasa Anda.
- Selain itu, kode Anda secara teoritis harus mendukung input apa pun - dengan asumsi itu diberikan cukup waktu dan memori.
- Ini
SPARTA!kode-golf , jadi jawaban tersingkat dalam byte menang!
Uji kasus
Haystack | Needle | Output
---------------------+----------+-----------------------------------
[ 1, 2, 3 ] | 65 | [ 321 ]
[ 1, 2, 3 ] | 7 | [ 123, 231, 312 ]
[ 12, 3 ] | 7 | [ 123, 312 ]
[ 1, 2, 2 ] | 15 | [ 122 ]
[ 1, 2 ] | 7 | []
[ 12, 34, 56 ] | 21 | [ 125634, 341256, 345612, 563412 ]
[ 1, 2, 3, 4, 5 ] | 511 | [ 53241 ]
[ 1, 3, 5, 7, 9 ] | 593 | [ 37519, 51793, 75913, 75931 ]
[ 11, 12, 13, 14 ] | 12141311 | [ 12141311 ]
[ 1, 2, 1, 2, 1, 2 ] | 1015 | [ 221112 ]
sumber
set([(1, 2, 2)])
. Apakah ini valid atau haruskah saya singkirkanset
?["12","3"]
dan["1","23"]
dua tumpukan jerami yang berbeda.Jawaban:
05AB1E ,
108 byteMengambil jarum dalam biner untuk menghemat 1 byte.
-2 byte terima kasih kepada Emigna
Cobalah online!
sumber
Python 2, 90 byte
-3 byte terima kasih kepada @ Gábor Fekete
Cobalah online
Diambil sebagai array input string, mewakili int dari hay dan string, mewakili jarum dalam biner
sumber
{...}
alih-alihset(...)
menghemat 3 byte.H=['1'], N='0'
.Java 10,
320312305297292 byteInput sebagai List & binary-String, output sebagai Strings pada baris baru.
Penjelasan:
Coba di sini.
sumber
l->n->{...
setelahvoid p(...
lambda adalah jawaban untuk prompt dan fungsi diperlukan setup agar lambda berfungsi. Konsensus tentang "ekspresi fungsi" adalah sesuatu seperti "ekspresi 'terakhir dari kiriman Anda dapat menjadi' ekspresi fungsi 'jika ketika disimpan ke variabel, ia memenuhi persyaratan jawaban fungsi" IIRC. Tapi itu hanya masalah pemformatan, dan subyektif.void
karena lebih pendek dari lambda kedua dan banyak.apply
. Belum memeriksanya untuk jawaban ini (yaituvoid p(List l,int k)
& 2xp(l,0)
versus(l,k)->
& 2xp.apply(l,0)
). Hmm .. yang kedua sepertinya 1 byte lebih pendek dalam hal ini. Tapi Anda mengatakan aturan menyatakan Anda hanya diperbolehkan memiliki satu metode lambda? Masih agak bingung mengapa itu harus menjadi yang terakhir. Secara pribadi saya selalu posting jawaban saya dalam urutan ini:imports; class-fields; main-method/lambda; other methods
.imports;helper methods;lambda
void p(List l,int k)
& 2xf(l,0);
versusf=(l,p)->
& 2xp.apply(l,0);
(yang berarti versi saat ini lebih pendek 1 byte). Adapun pesanan, saya akan tetap dengan ini karena saya sudah melakukannya dengan semua jawaban saya, dan masuk akal bagi saya secara pribadi untuk memulai dengan metode utama dalam penjelasan, dan kemudian metode pembantu jika adaf=(lambda)
di Jawa, itujava.util.function.BiConsumer<List,Integer>f=(l,p)->{...}
Japt ,
1514131210 byteMengambil tumpukan jerami sebagai array bilangan bulat dan jarum sebagai string biner. Output array string integer.
Cobalah
Penjelasan
sumber
®¬nÃ
menyimpan satu byte pada pemetaan. (Saya juga akan pindahâ
ke tengah-tengah program untuk menyingkirkan yang keduaÃ
; tidak menyimpan byte, tetapi itu sedikit lebih efisien dan terlihat sedikit lebih baik)â
adalah perbaikan cepat yang ditempelkan pada akhirnya ketika Arnauld menunjukkan bahwa saya lupa menghapus duplikat dari array terakhir tetapi, Anda benar, menghapus duplikat sebelum menjalankan filter akan lebih efisien.Ruby ,
6159 byteCobalah online!
Fitur keren hari ini: Saya tidak tahu saya bisa menampilkan representasi biner dari string yang berisi angka.
Contoh:
sumber
JavaScript (ES6), 140 byte
Mengambil jarum sebagai string biner.
Tampilkan cuplikan kode
sumber
Brachylog , 15 byte
Cobalah online!
Penjelasan
sumber
Mathematica,
170156 bytememasukkan
keluaran
sumber
v[#2, 2]
.CJam,
23222119 byteIni adalah blok yang mengambil input
n h
pada stack dan meninggalkan output sebagai array pada stack.Penjelasan:
sumber
R, 114 byte
Menggunakan banyak paket.
pryr::f()
secara otomatis membuat fungsi, mengambilp
, string dari pola biner untuk mencari, danx
, vektor dengan input lain sebagai input.combinat::permn
membuat semua permutasi darix
.R.utils::intToBin
adalah versi yang bagus dan bertele-tele untuk mengonversi angka (atau representasi karakter dari angka) menjadi angka biner, yang sudah tersimpan sebagai karakter. Jadi menerapkan ini pada semua permutasi dan mengeluarkannya jika string binerp
terkandung dalam versi biner dari rangkaian tersebut. Baris baru yang eksplisit dicetak, karena jika tidak, hasilnya akan seperti itu12 56 3456 34 1234 56 1234 12 56
.plyr
'sl_ply
digunakan untuk menekan keluaran daftar null, selain output biasa. Jika output seperti ini diizinkan:Maka kita bisa menyimpan beberapa byte dengan menggunakan
lapply
:108 byte:
Jika output seperti ini diizinkan:Maka kita bisa melakukannya lebih pendek:
101 byte:
Tidak diizinkansumber
Perl 6 , 69 byte
sumber