Tantangan:
Diberikan input matriks, tentukan jumlah diagonal dan anti-diagonal dengan angka duplikat.
Jadi jika kita memiliki matriks seperti ini:
[[aa,ab,ac,ad,ae,af],
[ba,bb,bc,bd,be,bf],
[ca,cb,cc,cd,ce,cf],
[da,db,dc,dd,de,df]]
Semua diagonal dan anti-diagonal adalah:
[[aa],[ab,ba],[ac,bb,ca],[ad,bc,cb,da],[ae,bd,cc,db],[af,be,cd,dc],[bf,ce,dd],[cf,de],[df],
[af],[ae,bf],[ad,be,cf],[ac,bd,ce,df],[ab,bc,cd,de],[aa,bb,cc,dd],[ba,cb,dc],[ca,db],[da]]
Contoh:
[[1,2,1,2,1,2],
[1,2,3,4,5,6],
[6,5,4,3,2,1],
[2,1,2,1,2,1]]
Semua diagonal dan anti-diagonal adalah:
[[1],[2,1],[1,2,6],[2,3,5,2],[1,4,4,1],[2,5,3,2],[6,2,1],[1,2],[1],
[2],[1,6],[2,5,1],[1,4,2,1],[2,3,3,2],[1,2,4,1],[1,5,2],[6,1],[2]]
Menghapus semua diagonal dan anti-diagonal hanya berisi angka unik:
[[2,3,5,2],[1,4,4,1],[2,5,3,2],[1,4,2,1],[2,3,3,2],[1,2,4,1]]
Jadi outputnya adalah jumlah diagonal dan anti-diagonal yang mengandung angka duplikat:
6
Aturan tantangan:
- Jika matriks input kosong, hanya berisi 1 angka, atau hanya berisi angka unik di seluruh matriks, hasilnya selalu
0
. - Input dijamin hanya mengandung digit positif
[1,9]
(kecuali benar-benar kosong). - Matriks akan selalu berbentuk persegi panjang (yaitu semua baris memiliki panjang yang sama).
- I / O fleksibel. Input dapat diambil sebagai daftar daftar bilangan bulat, atau array 2D bilangan bulat, atau objek Matrix, sebagai string, dll. Anda juga dapat mengambil satu atau kedua dimensi matriks sebagai input tambahan apakah itu akan menyimpan byte dalam bahasa pilihan Anda.
Aturan umum:
- Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'. - Aturan standar berlaku untuk jawaban Anda dengan aturan I / O default , sehingga Anda diizinkan untuk menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program penuh. Panggilanmu.
- Celah default tidak diperbolehkan.
- Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda (yaitu TIO ).
- Juga, menambahkan penjelasan untuk jawaban Anda sangat dianjurkan.
Kasus uji:
Input: Output:
[[1,2,1,2,1,2], 6
[1,2,3,4,5,6],
[6,5,4,3,2,1],
[2,1,2,1,2,1]]
[[]] 0
[[1,2], 0
[3,4]]
[[1,1], 2
[1,1]]
[[9,9,9], 6
[9,9,9],
[9,9,9]]
[[7,7,7,7], 8
[7,7,7,7],
[7,7,7,7]]
[[1,1,1], 1
[2,3,4],
[2,5,1]]
[[1,8,4,2,9,4,4,4], 12
[5,1,2,7,7,4,2,3],
[1,4,5,2,4,2,3,8],
[8,5,4,2,3,4,1,5]]
[[1,2,3,4], 4
[5,6,6,7],
[8,6,6,9],
[8,7,6,5]]
sumber
row
dancol
ke daftar 'fungsi yang sangat situasional'. Solusi yang sangat pintar.c(m|x-y,m|x+y)
langsung ke panggilan sapply, menghapusl=
bagian itu. Saya tidak melihat tes yang gagal. Cobalah online!l
contoh yang tersisa.row
dancolumn
berfungsi ke R pagi ini, karena saya belum pernah mendengarnya.J ,
2120 byte-1 byte terima kasih kepada Jonah!
Cobalah online!
Penjelasan:
sumber
(-.@-:~.)
untuk "item unik tidak cocok" di J tetapi saya sudah berkali-kali bertemu ini dan saya tidak berpikir Anda bisa ... kami punya=
dan~:
, pada satu tangan, dan-:
dan<this is missing>
.1#.|.,&((~:&#~.)/.)]
. Cobalah online!&
, terima kasih!Japt , 31 byte
Coba semua uji kasus
Penjelasan:
Saya juga mencoba versi yang didasarkan pada jawaban Haskell dari Kirill L., tetapi tidak menemukan cara yang baik untuk "dikelompokkan berdasarkan fungsi indeks X dan Y" dan alternatif yang saya temukan tidak cukup baik.
sumber
JavaScript (ES6),
107 105 10198 byteCobalah online!
Catatan
Cara kode ini di-golf, anti-diagonal yang terdiri dari satu-satunya sel kiri bawah tidak pernah diuji. Tidak apa-apa karena tidak mungkin mengandung nilai duplikat.
Berkomentar
sumber
05AB1E , 25 byte
Cobalah online! atau sebagai Test Suite
Penjelasan
Saya merasa seperti melewatkan sesuatu di sini.
Perlu mencoba dan golf ini nanti.
sumber
rotate N left
akanN._
sekarang. Begituí‚εεygÅ0«N._]
juga bekerja. Juga dapat menghapus rata dengan perubahan baru ini ... masih tanpa penghematan byte:í‚vyεygÅ0«N._}ø}«ʒ0KDÙÊ}g
N(._
saya kira, tetapi AndaNFÁ}
memiliki panjang yang sama, dan bahkan lebih pendek dalam hal ini karena]
menutup loop dan peta secara bersamaan. Secara keseluruhan penggunaan._
hanya berguna bila dibiarkan menghemat 1 byte, dibandingkan denganNFÀ}
.Python 2 ,
144136 byteCobalah online!
sumber
Oktaf , 98 byte
Cobalah online!
sumber
cellfun
, dan untuk yang masokisstructfun
juga. Di Octave, itu untuk loop atau memilikifun
!Haskell,
118112 byteCobalah online!
sumber
Arang ,
615653 byteCobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Loop di depan dan diagonal terbalik;
i=0
mewakili diagonal maju sementarai=1
mewakili diagonal terbalik.Ulangi setiap indeks baris. Ini merupakan indeks awal diagonal.
Ulangi setiap indeks kolom.
Hitung indeks baris diagonal pada indeks kolom ini. Saya menggunakan a
for
loop pada array elemen tunggal alih-alih tugas karena ini menghindari harus membungkus tugas menjadi blok dengan pernyataan berikut, sehingga menghemat satu byte.Periksa apakah ini kolom pertama atau diagonal akan membungkus antara bawah dan atas.
Jika tidak maka pop daftar terakhir dari daftar daftar.
jika kemudian mulai daftar kosong baru.
Tambahkan entri diagonal saat ini ke daftar itu.
Dan dorong daftar itu (kembali) ke daftar daftar.
Hitung jumlah daftar yang berisi duplikat.
Mari kita ambil contoh kapan
i=0
dank=1
. Ini berarti bahwa kami telah mengumpulkan dua diagonal[[1,1,5,2],[9,4,3,5]]
,. Inilah masukan kami:Kami kemudian beralih
l
dari0
ke7
. Ini memajukan baris dan kolom sebanyak 1 setiap kali:Daftarnya sekarang
[[1,1,5,2],[9,4,3,5],[5,4,4]]
. Namun ketikal
adalah3
, kita memilikik+l=4
, kelipatan dari ketinggian array. Ini berarti bahwa kita harus mulai daftar baru:[[1,1,5,2],[9,4,3,5],[5,4,4],[]]
. Kami kemudian terus mengumpulkan elemen diagonal:Daftarnya sekarang
[[1,1,5,2],[9,4,3,5],[5,4,4],[2,7,2,1]]
. Sekarang ketikal
adalah7
, kita memilikik+l=8
, beberapa lain dari ketinggian dari array. Ini berarti bahwa kita harus mulai daftar baru, yang berakhir dengan elemen terakhir dari yang diagonal:[[1,1,5,2],[9,4,3,5],[5,4,4],[2,7,2,1],[4]]
.Dengan mengumpulkan diagonal pembungkus mulai dari elemen pertama dari setiap baris, kami akhirnya mengumpulkan semua diagonal array.
sumber
Bahasa Wolfram (Mathematica) ,
99 98 96 9483 byteCobalah online!
Function[a,a~Diagonal~#&/@Range[t=-#~Total~2,-t]]
mendapat semua diagonala
- yang berfungsi karena#~Total~2
lebih besar dari dimensia
.sumber
APL + WIN, 69 byte
Anjuran untuk matriks 2d dari formulir 4 6⍴1 2 1 2 1 2 1 2 3 4 5 6 6 5 4 3 2 1 2 1 2 1 2 1
Ini menghasilkan:
Cobalah online! Atas perkenan Dyalog Classic
Penjelasan:
Hasil:
sumber
Perl 5,
8982 byteTIO
sumber
TSQL,
140128 byteMenemukan cara untuk bermain golf 12 karakter. Ini bukan lagi solusi terpanjang.
Golf:
Tidak Disatukan:
Cobalah
sumber