Terinspirasi (dengan penjelasan dicuri dari) ini
Latar Belakang
Katakanlah Anda memiliki dua daftar A = [a_1, a_2, ..., a_n]
dan B = [b_1, b_2, ..., b_n]
bilangan bulat. Kita mengatakan A
adalah berpotensi-habis dibagi oleh B
jika ada permutasi dari B
yang membuat a_i
dibagi oleh b_i
semua i
. Masalahnya kemudian: apakah mungkin untuk memesan ulang (yaitu permutasi) B
sehingga a_i
dapat habis b_i
bagi semua orang i
? Misalnya, jika sudah
A = [6, 12, 8]
B = [3, 4, 6]
Maka jawabannya akan True
, karena B
dapat mengatur kembali menjadi B = [3, 6, 4]
dan kemudian kita akan memiliki yang a_1 / b_1 = 2
, a_2 / b_2 = 2
dan a_3 / b_3 = 2
, yang semuanya bilangan bulat, sehingga A
berpotensi-habis dibagi B
.
Sebagai contoh yang seharusnya ditampilkan False
, kita dapat memiliki:
A = [10, 12, 6, 5, 21, 25]
B = [2, 7, 5, 3, 12, 3]
Alasannya False
adalah karena kami tidak dapat memesan ulang B
karena 25 dan 5 ada A
, tetapi satu-satunya pembagi B
adalah 5, jadi orang akan ditinggalkan.
Tugas Anda
Tugas Anda, tentu saja, untuk menentukan apakah dua daftar (diberikan sebagai input) berpotensi dibagi. Anda dapat mengambil input dengan cara apa pun yang diterima, seperti halnya dengan output.
Duplikat dalam daftar adalah suatu kemungkinan, dan satu-satunya batasan ukuran pada bilangan bulat adalah bahasa Anda. Semua bilangan bulat di kedua daftar akan lebih besar dari 0, dan kedua daftar akan berukuran sama.
Seperti halnya semua masalah keputusan , nilai output harus 2 nilai berbeda yang mewakili benar dan salah.
Ini adalah kode-golf sehingga kode terpendek menang!
Uji kasus
Input, input => output
[6, 12, 8], [3, 4, 6] => True
[10, 5, 7], [1, 5, 100] => False
[14, 10053, 6, 9] [1,1,1,1] => True
[12] [7] => False
[0, 6, 19, 1, 3] [2, 3, 4, 5, 6] => undefined
sumber
Jawaban:
Jelly , 5 byte
Mengembalikan 0 untuk Benar , 1 untuk Salah .
Cobalah online!
Bagaimana itu bekerja
sumber
Sekam ,
765 byteDisimpan 2 byte berkat @Zgarb
Membawa argumen dalam urutan terbalik dan mengembalikan
1
untukTrue
dan0
untukFalse
.Cobalah online!
Penjelasan
sumber
VΠMz¦P
harus bekerja selama 6 byte.Mz
bisa jadi‡
.▼▲
bukan▲▼
. Bagaimanapun ide yang bagus!05AB1E , 7 byte
Input: mengambil daftar B dan A (urutan terbalik)
Output: 1 bila benar, 0 sebaliknya
Cobalah online!
Penjelasan:
sumber
MATL ,
876 byteOff 1 byte menggunakan ide dari jawaban Dennis 'Jelly
Inputnya
B
, laluA
. Output adalah0
jika habis dibagi atau1
jika tidak.Cobalah online!
Penjelasan
sumber
Mathematica, 52 byte
terima kasih @ngenisis untuk -5 byte
sumber
Cases
umumnya lebih pendek:Cases[Permutations@#2,p_/;And@@IntegerQ/@(#/p)]!={}&
JavaScript (ES6),
6763 byteMengembalikan boolean.
Uji kasus
Tampilkan cuplikan kode
sumber
Haskell ,
7974686261 byteCobalah online!
Disimpan 1 byte berkat @nimi
sumber
f a=any((<1).sum.zipWith rem a).permutations
.R + combinat ,
696658 byte-3 byte berkat Jarko Dubbeldam
lain -8 byte terima kasih kepada Jarko
anehnya, R tidak memiliki builtin untuk menghasilkan semua permutasi. Mengembalikan boolean.
Selain itu, dengan peningkatan kedua
any
Jarko , memaksa daftar ke vektorlogical
dengan peringatan.Cobalah online! (r-biola)
sumber
Mathematica, 42 byte
sumber
Jelly , 7 byte
Cobalah online!
Kompleksitas faktorial dalam panjang daftar.
sumber
any
builtin? TILPyth - 11 byte
Test Suite .
sumber
J, 27 byte
Cobalah online!
Mengambil daftar pertama sebagai argumen kiri dan daftar kedua sebagai kanan.
sumber
(|"1~e.~0*[)i.@!@#A.]
CJam,
2017 byteVersi Uji
Fungsi yang menggunakan array B sebagai argumen pertama dan array A sebagai argumen kedua. Perhatikan bahwa dalam versi uji saya beralih urutan ke A lalu B.
sumber
JavaScript (ES6), 100 byte
Agak tidak efisien; tambahan
&
akan mempercepatnya.sumber
PHP,
112 180178 byteSaya berpikir terlalu pendek.
fungsi anonim mengambil dua array, pengembalian
NULL
untuk kepalsuan dan1
untuk kebenaran.Melempar kesalahan jika array kedua berisi
0
.Cobalah online .
sumber
$f([6,5],[3,5])
.C (gcc) , 191 byte
Cobalah online!
Pemakaian:
f(int size, int size, int *a, int *b)
kembali
1
jika dapat dibagi,0
jika tidak. Lihat contoh penggunaan pada TIO.(Harus melakukan permutasi dengan cara yang sulit di C, jadi ini hampir tidak kompetitif)
sumber
Perl 6 , 38 byte
Sebenarnya jawaban @nwellnhof tampaknya terlalu banyak dibaca, jadi saya berangkat untuk mengikuti tradisi Perl yang bagus dari kode tulis saja :—).
1 byte disimpan berkat @nwellnhof.
Cobalah online!
Apa fungsinya: Ini adalah fungsi anonim yang mengambil dua argumen daftar. Ketika kita mengatakan
@^a
, yang kita maksud adalah yang pertama, kapan@^b
, yang kedua.(@^a,)
adalah daftar yang berisi daftar@^a
.@^b.permutations
adalah daftar semua permutasi dari@^b
. Operator "XZ %%" memungkinkan semua pasangan yang memungkinkan dari satu daftar di sebelah kiri dan semua permutasi di sebelah kanan, dan menggunakan operator "Z %%" pada mereka, yang merupakan operasi "zip" standar menggunakan operator yang dapat dibagi. %%.The
max
Operator memberikan elemen terbesar dari daftar (dalam hal ini, itu daftar yang memiliki palingTrue
's di dalamnya). Kami kemudian menguranginya menggunakan operator AND logis untuk melihat apakah semua elemen dari daftar "paling benar" itu benar, dan itulah hasilnya. Ini hampir persis salinan dari apa yang ditulis @nwellnhof, hanya menggunakan operator yang tidak jelas untuk memotong byte.sumber
permutations
, itu jelas terlalu mudah dibaca;)[&&]
denganmin
untuk menyimpan byte lain.XZ%%
{all (@^a,)Z%%@^b.permutations.any}
mungkinBrachylog , 6 byte
Cobalah online!
Predikat berhasil jika kedua daftar berpotensi habis dibagi dan gagal jika tidak.
sumber
Python 2 , 92 byte
Cobalah online!
Implementasi dasar Anda.
sumber
Python 2 , 90 byte
Cobalah online!
sumber
Ruby , 56 byte
Cobalah online!
Cukup mudah, mengeksploitasi fakta yang
permutation
ada.sumber
Scala, 60 Bytes
Golf:
Tidak Terkumpul:
sumber
Japt ,
1211 byteOutput
true
ataufalse
.Menguji
Penjelasan
Masukan implisit array
U
&V
(A
&B
, masing-masing)Hasilkan larik semua permutasi dari
V
.Periksa apakah ada elemen (sub-array) yang mengembalikan true.
Periksa apakah setiap elemen dalam sub-array saat ini mengembalikan true ketika melewati fungsi berikut, dengan
X
menjadi elemen saat ini danY
indeks saat ini.Dapatkan elemen dalam
U
indeksY
.Periksa apakah habis dibagi
X
.sumber