(Terinspirasi oleh pertanyaan ini di atas tentang Matematika)
Definisi
Diberikan n x n
matriks kuadrat A , kita dapat menyebutnya invertible
jika ada beberapa n x n
matriks kuadrat B sedemikian sehingga AB = BA = I n , dengan I n menjadi matriks identitas ukuran n x n
(matriks dengan diagonal utama 1
s dan apa pun yang lain 0
), dan AB dan BA yang mewakili perkalian matriks biasa (saya tidak akan membahasnya di sini - ambil kelas aljabar linier).
Dari itu, kami dapat memanggil m x n
matriks C totally invertible
jika setiap k x k
submatrix (didefinisikan di bawah) dari C dibalik untuk semua k > 1
, k <= (smaller of m,n)
.
Sebuah submatrix didefinisikan sebagai matriks yang dihasilkan setelah penghapusan sejumlah baris dan / atau kolom dari matriks asli. Sebagai contoh, 3x3
matriks C di bawah ini dapat ditransformasikan menjadi 2x2
submatrix C ' dengan menghapus baris pertama 1 2 3
dan kolom tengah 2 5 8
sebagai berikut:
C = [[1 2 3]
[4 5 6] --> C' = [[4 6]
[7 8 9]] [7 9]]
Perhatikan bahwa ada banyak kemungkinan submatrix yang berbeda, di atas hanyalah sebuah contoh. Tantangan ini hanya berkaitan dengan orang-orang di mana submatrix yang dihasilkan adalah k x k
matriks persegi .
Tantangan
Diberikan matriks input, tentukan apakah itu benar-benar tidak dapat dibalik atau tidak.
Input
- Satu matriks ukuran
m x n
, dalam format apa pun yang sesuai . - Tanpa kehilangan sifat umum, Anda dapat mengasumsikan
m <= n
ataum >= n
, yang mana golfier untuk kode Anda, dan mengambil input seperti itu (yaitu, Anda mendapatkan operasi transpos gratis jika Anda menginginkannya). - Ukuran matriks input tidak akan lebih kecil dari
3 x 3
, dan tidak lebih besar dari bahasa Anda dapat menangani. - Matriks input hanya terdiri dari nilai numerik dari Z + ( bilangan bulat positif ).
Hasil
- Nilai true / falsey untuk apakah matriks input benar-benar dapat dibalik.
Aturan
- Program lengkap atau fungsi dapat diterima.
- Celah standar dilarang.
- Ini adalah kode-golf sehingga semua aturan golf biasa berlaku, dan kode terpendek (dalam byte) menang.
Contohnya
Truthy
[[1 2 3]
[2 3 1]
[3 1 2]]
[[2 6 3]
[1 12 2]
[5 3 1]]
[[1 2 3 4]
[2 3 4 1]
[3 4 1 2]]
[[2 3 5 7 11]
[13 17 19 23 29]
[31 37 41 43 47]]
Falsey
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 6 2 55 3]
[4 5 5 5 6]
[9 3 7 10 4]
[7 1 8 23 9]]
[[2 3 6]
[1 2 12]
[1 1 6]]
[[8 2 12 13 2]
[12 7 13 12 13]
[8 1 12 13 5]]
sumber
2 6 3; 1 12 2; 5 3 1
?6
di sudut, bukan a7
. Kesalahan ketik yang canggung.Jawaban:
Jelly ,
26 24 23 20 19 1716 byte-1 byte terima kasih kepada @miles (tidak perlu untuk masing-masing
€
,, ketika mengambil determinan)-2 byte, @miles lagi! (Pemisahan rantai yang tidak perlu, dan penggunaan
Ѐ
cepat)TryItOnline! atau semua 8 tes
Bagaimana?
sumber
ldepth = 2
di sumbernyaZœcLÆḊ
dan byte lain di link utama olehçЀJȦ
€
Anda bermain golf. Benar-benar lupaЀ
.œcЀJµZœcLÆḊµ€€Ȧ
yang juga 16 byteMathematica 10.0, 34 byte
Rantai 6-tilde ... catatan pribadi baru!
sumber
MATL, 57 byte
Tentu saja, Anda dapat mencobanya secara online!
Input harus dalam orientasi 'potret' (nRows> = nColumns). Saya merasa bahwa ini mungkin bukan solusi yang paling efisien ... Tapi setidaknya saya meninggalkan beberapa ruang bagi orang lain untuk mengalahkan saya. Saya akan senang mendengar petunjuk khusus yang bisa membuat pendekatan khusus ini lebih pendek, tetapi saya pikir ini bytecount besar harus menginspirasi orang lain untuk membuat entri MATL dengan pendekatan yang sama sekali berbeda. Menampilkan 0 jika salah, atau nilai besar jika benar (akan dengan cepat menjadi Inf jika matriks terlalu besar; untuk 1 byte tambahan, seseorang dapat mengganti
H*
denganH&Y
(logis dan)). Disimpan beberapa byte berkat @LuisMendo.sumber