Sebuah Walsh matriks adalah jenis khusus dari matriks persegi dengan aplikasi di kuantum komputasi (dan mungkin di tempat lain, tapi aku hanya peduli tentang komputasi kuantum).
Properti dari matriks Walsh
Dimensi adalah kekuatan yang sama dari 2. Oleh karena itu, kita dapat merujuk matriks ini oleh dua ini eksponen sini, menyebut mereka W(0)
, W(1)
, W(2)
...
W(0)
didefinisikan sebagai [[1]]
.
Sebab n>0
, W(n)
terlihat seperti:
[[W(n-1) W(n-1)]
[W(n-1) -W(n-1)]]
Begitu W(1)
juga:
[[1 1]
[1 -1]]
Dan W(2)
adalah:
[[1 1 1 1]
[1 -1 1 -1]
[1 1 -1 -1]
[1 -1 -1 1]]
Polanya berlanjut ...
Tugas Anda
Tulis program atau fungsi yang mengambil input integer n
dan mencetak / mengembalikan W(n)
dalam format apa pun yang nyaman. Ini bisa berupa array array, array boolean yang rata, .svg
gambar, apa saja, asalkan itu benar.
Celah standar dilarang.
Beberapa hal:
Sebab W(0)
, 1
tidak perlu dibungkus sekali pun. Ini bisa menjadi bilangan bulat belaka.
Anda diizinkan untuk hasil 1-indeks W(1)
kemudian akan [[1]]
.
Uji kasus
0 -> [[1]]
1 -> [[1 1]
[1 -1]]
2 -> [[1 1 1 1]
[1 -1 1 -1]
[1 1 -1 -1]
[1 -1 -1 1]]
3 -> [[1 1 1 1 1 1 1 1]
[1 -1 1 -1 1 -1 1 -1]
[1 1 -1 -1 1 1 -1 -1]
[1 -1 -1 1 1 -1 -1 1]
[1 1 1 1 -1 -1 -1 -1]
[1 -1 1 -1 -1 1 -1 1]
[1 1 -1 -1 -1 -1 1 1]
[1 -1 -1 1 -1 1 1 -1]]
8 ->
Pastebin
Ini adalah kode-golf , jadi solusi terpendek dalam setiap bahasa menang! Selamat bermain golf!
W(1)
kembali[[1]]
,W(2)
kembali[[1,1],[1,-1]
...)Jawaban:
Perl 6 ,
634440 byteCobalah online!
Pendekatan non-rekursif, mengeksploitasi fakta bahwa nilai pada koordinat x, y adalah
(-1)**popcount(x&y)
. Mengembalikan array Boolean yang diratakan.-4 byte berkat xnor 's bit paritas trik .
sumber
MATL , 4 byte
Cobalah online!
Bagaimana itu bekerja:
Tanpa built-in: 11 byte
Cobalah online!
Cara kerjanya :
Untuk setiap matriks Walsh W , matriks berikutnya dihitung sebagai [ W W ; W - W ], seperti yang dijelaskan dalam tantangan. Kode melakukan itu
n
kali, mulai dari matriks 1 × 1 [1].sumber
kron
. ;)Haskell ,
5756 byteCobalah online! Ini mengimplementasikan konstruksi rekursif yang diberikan.
-1 byte terima kasih kepada Ørjan Johansen !
sumber
(iterate(\m->zipWith(++)(m++m)$m++(map(0-)<$>m))[[1]]!!)
.Oktaf dengan builtin,
1817 byteCobalah online!
Oktaf tanpa builtin,
56 5147 byteCobalah online! Terima kasih kepada @Luis Mendo untuk -4.
Oktaf dengan lambda rekursif,
54 53 5248 byteCobalah online! Terima kasih atas jawaban ini dan pertanyaan ini untuk inspirasi.
sumber
end
tidak diperlukan. Jadi, Anda dapat memindahkannya ke header TIO dan dengan demikian menghapusnya dari hitungan byteAPL (Dyalog Unicode) , 12 byte
Cobalah online!
Output adalah array 2 dimensi.
sumber
Python 2 ,
7571 byteCobalah online!
Matriks Walsh tampaknya terkait dengan angka-angka jahat. Jika
x&y
(bitwise dan, koordinat berbasis 0) adalah angka jahat, nilai dalam matriks adalah1
,-1
untuk angka najis. Perhitungan bit paritasint(bin(n),13)%2
diambil dari komentar Noodle9 pada jawaban ini .sumber
x&y
untuk menentukan berapa kali flip tanda.R ,
61565350 byteCobalah online!
Secara rekursif menghitung matriks dengan produk Kronecker, dan mengembalikan 1 untuk
n=0
kasing (terima kasih kepada Giuseppe karena menunjukkan ini, dan juga kepada JAD karena telah membantu golf versi awal).Tambahan -3 byte lagi terima kasih kepada Giuseppe.
sumber
1
bukanmatrix(1)
valid, tetapi jika Anda dapat menurunkan ini, dan ada pendekatan 61 byteReduce
juga: coba!n=0
kasus, sebagian besar jawaban lain membungkusnya dalam [[1]], tetapi tidak semua ...matrix(1)
dengant(1)
.1-2*!3:0
lebih pendek daric(1,1,1,-1)
tiga byte.Jelly , 14 byte
Cobalah online!
Ubah
G
toŒṘ
di dalam footer untuk melihat output aktual.sumber
JavaScript (ES6), 77 byte
Perhitungan naif dimulai dengan mengambil
0 <= X, Y <= 2**N
diW[N]
. Kasus sederhana adalah ketika salah satuX
atauY
kurang dari2**(N-1)
, dalam hal ini kita berulangX%2**(N-1)
danY%2**(N-1)
. Dalam hal keduanyaX
danY
setidaknya2**(N-1)
panggilan rekursif perlu dinegasikan.Jika daripada membandingkan
X
atauY
kurang dari2**(N-1)
bitmaskX&Y&2**(N-1)
diambil maka ini bukan nol ketika panggilan rekursif perlu dinegasikan dan nol ketika tidak. Ini juga menghindari keharusan mengurangi modulo2**(N-1)
.Bit tentu saja dapat diuji dalam urutan terbalik untuk hasil yang sama. Kemudian daripada menggandakan bitmask setiap kali kita mengoordinasikannya dapat dibelah dua sebagai gantinya, membiarkan hasilnya menjadi XOR, di mana hasil akhir
0
berarti tidak ada negasi dan1
berarti negasi.sumber
Pari / GP , 41 byte
Cobalah online!
sumber
K (ngn / k) , 18 byte
Cobalah online!
sumber
05AB1E , 16 byte
Cobalah online!
Penjelasan
Saya berharap saya tahu cara yang lebih singkat untuk menghitung Berat Hamming.
1δ¢˜
panjangnya sama dengan0м€g
.sumber
Sekam , 13 byte
Cobalah online!
1-diindeks.
Penjelasan
sumber
JavaScript (Node.js) ,
1008979 byteCobalah online!
sumber
Python 2 ,
8079 byteCobalah online!
sumber
0**n*[[1]]
untuk -1 bytePython 2 , 49 byte
Menampilkan beberapa pendekatan menggunakan perpustakaan tambahan. Yang ini bergantung pada built-in di Scipy:
Cobalah online!
Python 2 , 65 byte
Dan yang ini hanya menggunakan Numpy, dan diselesaikan oleh produk Kronecker, secara analog dengan jawaban R saya :
Cobalah online!
sumber
Stax , 20 byte
Jalankan dan debug di staxlang.xyz!
Kupikir aku akan mencoba tantanganku sendiri setelah beberapa waktu. Pendekatan non-rekursif. Tidak terlalu kompetitif melawan bahasa golf lainnya ...
Dibongkar (24 byte) dan penjelasan
sumber