Anda akan diberikan array dua dimensi dan angka dan Anda diminta untuk menemukan apakah matriks yang diberikan adalah Toeplitz atau tidak.
Masukkan format:
Anda akan diberi fungsi yang akan menggunakan two-dimensional
matriks sebagai argumen.
Format output:
Kembali 1
dari fungsi jika matriksnya adalah Toeplitz , kembalilah lagi -1
.
Kendala:
3 < n,m < 10,000,000
di mana n
jumlah baris sementara m
akan menjadi jumlah kolom.
Contoh Uji Kasus:
Sample Input :
4
5
6 7 8 9 2
4 6 7 8 9
1 4 6 7 8
0 1 4 6 7
Sample Output :
1
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
code-golf
grid
decision-problem
matrix
Martin Ender
sumber
sumber
Jawaban:
Mathematica, 42 byte
Mathematica tidak memiliki built-in untuk memeriksa apakah sesuatu adalah matriks Toeplitz, tetapi ia memiliki built-in untuk menghasilkannya. Jadi kami menghasilkan satu dari kolom pertama (
#&@@@#
) dan baris pertama (#&@@#
) dari input dan memeriksa apakah itu sama dengan input. Untuk mengonversiTrue
/False
hasil ke1
/-1
kami menggunakanBoole
(untuk memberi1
atau0
) dan kemudian cukup mengubah hasil dengan2x-1
.sumber
Oktaf , 30 byte
Saya berasumsi saya tidak harus menangani 1.000.000 x 1.000.000 matriks seperti yang tertulis dalam tantangan. Ini berfungsi untuk matriks yang tidak melebihi memori yang tersedia (kurang dari 1 TB dalam kasus saya).
Cobalah online!
Ini mengambil matriks
x
sebagai input dan membuat matriks Toeplitz berdasarkan nilai pada kolom pertama, dan baris pertama. Kemudian akan memeriksa setiap elemen dari matriks untuk kesetaraan. JIKA semua elemen sama maka inputnya adalah matriks Toeplitz.Output akan berupa matriks dengan dimensi yang sama dengan input. Jika ada nol dalam output maka itu dianggap falsy menjadi Oktaf.
Edit:
Hanya perhatikan format output yang ketat:
Ini bekerja selama 41 byte. Dimungkinkan untuk bermain golf satu atau dua byte dari versi ini, tapi saya harap aturan output akan sedikit lebih santai.
sumber
Jelly , 5 byte
Cobalah online!
Mengikuti definisi di sini .
sumber
05AB1E , 11 byte
Cobalah online!
Penjelasan
sumber
Haskell , 43 byte
Cobalah online!
sumber
False
diizinkan, saya mungkin telah mengalahkannya dengan satu byte.Mathematica, 94 byte
memasukkan
satu lagi berdasarkan algoritma Stewie Griffin
Mathematica, 44 byte
sumber
s
? Tidak bisakah Anda menggunakan#
saja?Java 7,
239233220113 byte-107 byte setelah tip menggunakan algoritma yang lebih efisien berkat @Neil .
Penjelasan:
Coba di sini.
sumber
r
=n
danc
=m
jika Anda membandingkannya dengan tantangan).-->
operator!Haskell , 51 byte
t
mengambil daftar daftar bilangan bulat dan mengembalikan bilangan bulat.Cobalah online!
Ini bisa jadi 39 atau 38 byte dengan output truey / falsy.
Ide untuk menggunakan
init
terinspirasi oleh jawaban 05AB1E Emigna, yang menggunakan metode yang sangat mirip; sebelum itu saya menggunakan zip bersarang.Bagaimana itu bekerja
zipWith((.init).(/=).tail)=<<tail
adalah bentuk bebas point dari\m->zipWith(\x y->tail x/=init y)(tail m)m
.m
, memeriksa apakah elemen pertama dengan elemen pertama dihapus berbeda dari elemen kedua dengan elemen kedua dihapus.or
kemudian menggabungkan cek untuk semua pasangan baris.1-sum[2|...]
mengkonversi format output.sumber
JavaScript (ES6),
6554 bytesumber
a=>a.some(b=>b.some((v,i)=>d[i]-(d[i]=v),d=[,...d]),d=[])?-1:1
(62 byte)Ruby , 54 byte
Persis seperti yang ditentukan, dapat di-golf lebih jika input / output fleksibel diterima.
Penjelasan:
Iterate pada matriks, dan bandingkan setiap garis dengan garis di atas, bergeser satu ke kanan. Jika berbeda, gunakan array kosong untuk iterasi berikutnya. Pada akhirnya, kembalikan -1 jika array terakhir kosong, atau 1 jika setidaknya 2 elemen (karena matriks terkecil yang mungkin adalah 3x3, ini benar jika semua perbandingan mengembalikan true)
Cobalah online!
sumber
<=>
untuk menghitung hasilnya!|(*x,_),y|
Anda tidak perlu memotongx
?PHP, 70 byte
sumber
Python, 108
Tidak efisien sama sekali karena menyentuh setiap elemen
n+m
kali saat memfilter untuk diagonal. Kemudian periksa apakah ada lebih dari satu elemen unik per diagonal.sumber
Aksioma, 121 byte
m harus menjadi Matriks dari beberapa elemen yang memungkinkan ~ =; ungolf itu
sumber
Retina , 148 byte
Cobalah online!
Matriks input N × M
pertama-tama dikonversi ke matriks N × (N + M-1) dengan menyelaraskan diagonal dengan cara ini:
dan kemudian kolom pertama diperiksa berulang kali untuk mengandung satu nomor unik, dan dihapus jika demikian. Matriksnya adalah Toeplitz jika outputnya kosong.
sumber
MATL , 11 byte
Cobalah online!
Metode "membuat matriks Toeplitz dan memeriksanya" secara langsung, yang menggunakan beberapa jawaban teratas, terasa membosankan bagi saya (dan sepertinya itu akan menjadi 1 byte lebih lama). Jadi saya pergi untuk metode "periksa setiap diagonal hanya berisi satu nilai unik".
T&Xd
- Ekstrak diagonal input dan buat matriks baru dengan mereka sebagai kolom (padding dengan nol sesuai kebutuhan)"
- beralih melalui kolom itu@Xz
- dorong variabel iterasi (kolom saat ini), dan hapus (padding) nol dari itu&=
- Cek kesetaraan siaran - ini menciptakan sebuah matriks dengan semua 1s (kebenaran) jika semua nilai yang tersisa sama satu sama lain, jika tidak, matriks tersebut berisi beberapa 0s yang palsuv
- menyatukan nilai hasil secara bersamaan, untuk membuat satu vektor hasil akhir yang bisa berupa kebenaran (semua 1) atau falsey (beberapa 0)sumber
R , 48 byte
Cobalah online!
sumber
Clojure, 94 byte
sumber