Perhatikan bahwa tantangan ini tidak memerlukan penanganan atau pemahaman angka kompleks.
Diberikan matriks kuadrat non-kosong di mana setiap elemen adalah daftar bilangan bulat dua elemen (Re, Im), tentukan (memberikan nilai kebenaran / kepalsuan atau dua nilai yang konsisten) apakah ini merupakan matriks Hermitian.
Perhatikan bahwa input adalah array 3D bilangan bulat; bukan array 2D bilangan kompleks. Jika bahasa Anda tidak dapat mengambil larik 3D secara langsung, Anda dapat membuat daftar datar (dan bentuk n × n atau n × n × 2 jika itu membantu).
Matriks adalah Hermitian jika sama dengan transpose konjugatnya sendiri . Dengan kata lain, jika Anda membalikkannya diagonal kiri atas ke kanan bawah dan meniadakan elemen kedua dari semua daftar daun dua elemen, itu identik dengan matriks input. Perhatikan bahwa urutan membalik dan meniadakan tidak relevan, sehingga Anda dapat meniadakan terlebih dahulu, dan membalik sesudahnya.
Contoh walk-though
Contoh ini menggunakan JSON dengan ruang putih berlebihan untuk memudahkan membaca:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Transpos (balik melintasi NW — SE diagonal):
[[ [2, 0] , [2,-1] , [4, 0] ],
[ [2, 1] , [3, 0] , [0,-1] ],
[ [4, 0] , [0, 1] , [1, 0] ]]
Meniadakan elemen kedua daftar daun:
[[ [2, 0] , [2, 1] , [4, 0] ],
[ [2,-1] , [3, 0] , [0, 1] ],
[ [4, 0] , [0,-1] , [1, 0] ]]
Karena ini identik dengan input, matriksnya adalah Hermitian.
Uji kasus
Hermit
[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,0]]]
[[[1,0],[2,0]],[[2,0],[1,0]]]
[[[1,0],[2,-3]],[[2,3],[1,0]]]
[[[42,0]]]
Non-Hermitian
[[[2,0],[2,1],[4,0]],[[2,-1],[3,0],[0,1]],[[4,0],[0,-1],[1,-1]]]
[[[0,1],[0,2]],[[0,2],[0,1]]]
[[[1,0],[2,3]],[[2,3],[1,0]]]
[[[3,2]]]
Jawaban:
R,
714847 byteMengambil array 3D dari bilangan real, membuat array 2D bilangan imajiner, transpos, konjugasi, dan bandingkan.
Terima kasih kepada @Giuseppe untuk mengurangi jumlah byte dengan 23 byte yang mengejutkan, dan @Vlo untuk yang terakhir 1!
Cobalah online!
Contoh:
sumber
B=A[,,1]+A[,,2]*1i
harus menyimpan beberapa byte.isSymmetric
ada dan berfungsi untuk matriks kompleks Hermitian tetapi1x1
kasusnya rumit karena[
menjatuhkan atribut dan menghasilkancomplex
lebih daripada amatrix
function(A)all(Conj(t(B<-A[,,1]+A[,,2]*1i))==B)
Tugas in-line menghemat 1.Oktaf ,
393431 byteCobalah online!
Disimpan 3 byte berkat Luis Mendo yang memberi tahu saya tentang klarifikasi dalam teks tantangan.
Penjelasan:
Dalam MATLAB dan Oktaf,
'
adalah transpose kompleks konjugat, bukan transpose "reguler".Kami membuat
y
sebaris variabel yang merupakan lapisan pertama dari matriks 3D ditambah lapisan kedua dikalikan dengan unit kompleksj
, yaitu matriks kompleks di mana istilah sebenarnya adalah "lapisan" pertama, dan imajiner adalah "lapisan" kedua. Kami kemudian memeriksa apakah itu sama dengan konjugat kompleks yang ditransposisikan.Ini akan menghasilkan matriks yang hanya berisi
1
jika benar, dan matriks yang mengandung setidaknya satu0
jika salah. Ini dianggap benar dan salah dalam Oktaf (Bukti) .sumber
Python 2 , 50 byte
Cobalah online!
sumber
APL (Dyalog Unicode) ,
221597 byteCobalah online!
Fungsi awalan Tacit.
Terima kasih kepada Adám selama 7 byte pada Dfn, dan juga Adám dan ErikTheOutgolfer karena
tahan dengan kebodohan sayamembantu saya menemukan versi diam-diam.Berkat ngn untuk 2 byte pada versi diam-diam.
Bagaimana?
sumber
Bahasa Wolfram (Mathematica) ,
453433262118 byteCobalah online!
sumber
0xf3c7
operator transpose, tapi apa itu0xf3c8
?0xf3c9
( Dokumentasi Wolfram ).Java 8,
137136134126119 byteKembali
1
jika Hermitian,0
sebaliknya.Penjelasan:
Cobalah online.
sumber
J , 14 byte
Cobalah online!
Penjelasan
sumber
-:0 2|:(,-)/"1
Haskell , 50 byte
-7 byte terima kasih kepada H.PWiz.
Cobalah online!
sumber
Jelly ,
65 byteTautan monadik yang kembali
1
untuk input Hermitian dan0
sebaliknya.Cobalah online!
Bagaimana?
sumber
Ø+
.05AB1E , 9 byte
Cobalah online!
Penjelasan
sumber
Ruby , 46 byte
Cobalah online!
Port jawaban Python saya
sumber
Perl 5 , -a0 48 byte
Penghitungan lama: 50 byte (
+2
untuka0
). Tidak buruk untuk bahasa yang tidak memiliki transpose bawaan (saya tidak cemburu sama sekali, tidak ada sirree)Berikan matriks input pada STDIN dengan
,
antara bagian nyata dan imajiner, jadi mis:Akan mencetak
1
untuk hermitian, tidak ada yang sebaliknyaCobalah online!
sumber
Sekam , 7 byte
Cobalah online!
Bagaimana?
Catatan yang
†
seharusnya berfungsimm
, tapi ada bug yang mengganggu yang yang mencegah saya menggunakannya :(sumber
JavaScript (ES6), 53 byte
Disimpan 2 byte berkat @Neil
Pengembalian
false
untuk Hermitian atautrue
non-Hermitian.Cobalah online!
sumber
f=([c,...s],p='')=>c?p+c+f(s,p+'🍹'):p
.C (gcc) ,
107103100 byteA[0]
ke*A
dua kali.Cobalah online!
sumber
Sebenarnya , 13 byte
Cobalah online!
Bagaimana itu bekerja?
Pengajuan ini sebenarnya menggunakan bilangan kompleks. Jika mengambil input sebagai matriks entri kompleks diizinkan, maka itu akan menjadi 8 byte .
sumber
Pyth, 9 byte
Penjelasan:
Suite uji .
sumber
qCmm*V_B1
.qCmm.e_Fbk
... rupanya saya lupa mengedit jumlah byte di kiriman akhir. @ Mr.Xcoder saya memperbaikinya, terima kasih atas tangkapannya!C,
111110108 byteTerima kasih kepada @Jonathan Frech karena telah menghemat satu byte dan terima kasih kepada @ceilingcat karena telah menghemat dua byte!
Cobalah online!
C (gcc) ,
106104 byteCobalah online!
sumber
r|=...|...
berfungsi jugar+=...||...
.Sebenarnya , 13 byte
Cobalah online!
Penjelasan:
sumber