quintopia telah memposting di sini sebuah tantangan untuk menghitung koefisien multinomial (beberapa teks di sini disalin dari sana). Ada algoritma yang menyenangkan untuk menghitung koefisien multinomial mod 2.
Mengingat daftar nomor, k 1 , k 2 , ..., k m , output residu dari koefisien multinomial:
berkurang mod 2. Berikut algoritma hal ini efisien: untuk setiap k i , menghitung ekspansi biner k i , yaitu, menemukan sebuah ij sehingga setiap a ij adalah 1 atau 0 dan
Jika ada j sehingga a rj = a sj = 1 untuk r ≠ s, maka koefisien multinomial mod 2 yang terkait adalah 0, jika tidak, koefisien multinomial mod 2 adalah 1.
Tugas
Menulis sebuah program atau fungsi yang mengambil m nomor, k 1 , k 2 , ..., k m , dan output atau hasil koefisien multinomial yang sesuai. Program Anda secara opsional dapat menganggap m sebagai argumen tambahan jika perlu.
Angka-angka ini dapat dimasukkan dalam format apa pun yang disukai, misalnya dikelompokkan ke dalam daftar atau disandikan di unary, atau apa pun, selama perhitungan aktual dari koefisien multinomial dilakukan oleh kode Anda, dan bukan proses pengkodean.
Output dapat berupa nilai kebenaran jika koefisien multinomialnya ganjil dan nilai falsey apa pun jika koefisien multinomial genap.
Built-in yang dirancang untuk menghitung koefisien multinomial tidak diperbolehkan.
Celah standar berlaku.
Mencetak gol
Ini adalah kode golf: Solusi terpendek dalam byte yang menang.
Contoh:
Untuk menemukan koefisien multinomial 7, 16, dan 1000, kami biner mengembangkan masing-masing:
Karena tidak ada kolom yang memiliki lebih dari satu 1, koefisien multinomialnya aneh, dan karenanya kita harus menampilkan sesuatu yang benar.
Untuk menemukan koefisien multinomial dari 7, 16, dan 76, kami biner mengembangkan masing-masing:
Karena keduanya 76 dan 7 memiliki 4 dalam ekspansi biner mereka, koefisien multinomial genap dan jadi kami menghasilkan nilai falsey.
Kasus uji:
Input: [2, 0, 1]
Output: Truthy
Input: [5,4,3,2,1]
Output: Falsey
Input: [1,2,4,8,16]
Output: Truthy
Input: [7,16,76]
Output: Falsey
Input: [7,16,1000]
Output: Truthy
Input: [545, 1044, 266, 2240]
Output: Truthy
Input: [1282, 2068, 137, 584]
Output: Falsey
Input: [274728976, 546308480, 67272744, 135004166, 16790592, 33636865]
Output: Truthy
Input: [134285315, 33849872, 553780288, 544928, 4202764, 345243648]
Output: Falsey
sumber
==
kesetaraan bisa menyelamatkan satu byte jika kebenaran dan falsey dibiarkan terbalik.Jawaban:
Jelly , 4 byte
Cobalah online!
Uji apakah jumlahnya sama dengan bitwise-atau-jumlah (yaitu
a+b+c == a|b|c
).sumber
Python
32,554342 byte-12 byte dari Mr. Xcoder
-1 byte dari Rod
Cobalah online!
Penjelasan: Memeriksa apakah jumlah angka sama dengan bitwise-atau angka.
sumber
lambda l:sum(l)==eval("|".join(map(str,l)))
Python 2 , 37 byte
Cobalah online!
Port lain dari algoritme pizzapants184 ...
sumber
Bersih , 38 byte
Cobalah online!
Namun pelabuhan lain.
sumber
Japt, 6 byte
Port lain dari solusi pizzapants184 & Leaky Nun.
Menguji
sumber
JavaScript (ES6),
373534 byteDisimpan 2 byte berkat @ Mr.Xcoder
Disimpan 1 byte berkat @ETHproduksi
Membandingkan jumlah dengan bitwise OR (seperti pizzapants184 dan Leaky Nun lakukan) adalah
134 byte lebih pendek daripada pendekatan awal saya:Uji kasus
Tampilkan cuplikan kode
Alt. versi, 38 byte
Uji kasus
Tampilkan cuplikan kode
sumber
a=>(q=c=>eval(a.join(c)))`|`==q`+`;
Haskell , 38 byte
(==).sum<*>foldl1 xor
adalah fungsi anonim mengembalikan aBool
. Gunakan sebagai((==).sum<*>foldl1 xor) [2,0,1]
.Cobalah online!
Trik yang hampir sama oleh pizzapants184 dan Leaky Nun yang digunakan semua orang, kecuali bahwa dengan nama operator Haskell menghemat satu byte untuk menggunakan (bitwise)
xor
alih-alih(.|.)
(bitwise atau).(==).sum<*>foldl1 xor
adalah versi point-free dari\l->sum l==foldl1 xor l
.sumber
Java 8, 53 byte
Port dari jawaban Jelly @ LeakyNun .
Penjelasan:
Coba di sini.
sumber
Pyth , 6 byte
Test Suite.
sumber
Sekam , 5 byte
Cobalah online!
sumber
Perl 6 , 15 byte
Menguji
Diperluas:
sumber
Merah , 78 byte
Bagaimana itu bekerja:
Tidak Disatukan:
Cobalah online!
sumber
Bahasa Wolfram (Mathematica) , 15 byte
Cobalah online!
sumber
Batch, 73 byte
Keluaran
1
untuk kebenaran, tidak ada yang palsu. Port lain yang jelas dari algoritme pizzapants184 / Leaky Nun.sumber
J , 10 byte
Namun port lain dari solusi pizzapants184 & Leaky Nun.
Bagaimana itu bekerja?
+/.&.#:
- Mengonversi angka menjadi biner, menerapkan bitwise atau ke pangkat dua dan mengkonversi kembali dari biner ke desimal+/
- kurangi input dengan penambahan=
- apakah di atas sama?Cobalah online!
Alternatif langsung
J , 12 byte
Bagaimana itu bekerja?
+/@#:
- Konversi setiap angka menjadi biner dan temukan jumlah masing-masing kekuatan 2>./
- temukan yang maksimal2>
- apakah kurang dari 2? -> benarCobalah online!
sumber
Triangularity , 31 byte
Cobalah online!
Solusi alternatif, 31 byte
Cobalah online!
sumber