Diberikan matriks, menampilkan representasi dari matriks di mana elemen kiri atas di atas, anti-diagonal adalah baris tengah dan elemen kanan bawah di bagian bawah.
Sebagai contoh, pertimbangkan matriks berikut:
1 2 3
4 5 6
7 8 9
Versi berlian dari matriks ini adalah:
1
4 2
7 5 3
8 6
9
Masukan dan keluaran
Matriks input akan diberikan sebagai daftar daftar (atau yang serupa dengan bahasa pilihan Anda). Keluaran harus berupa daftar daftar juga.
Matriks hanya akan berisi bilangan bulat positif.
Matriks input tidak harus persegi.
Matriks input akan setidaknya 1 × 1.
Uji Kasus
Input: [[1]]
Output: [[1]]
Input: [[1,2],[3,4]]
Output: [[1],[3,2],[4]]
Input: [[1,2,3],[4,5,6]]
Output: [[1],[4,2],[5,3],[6]]
Input: [[11,2,5],[3,99,3],[4,8,15],[16,23,42]]
Output: [[11],[3,2],[4,99,5],[16,8,3],[23,15],[42]]
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
code-golf
array-manipulation
matrix
Fatalisasi
sumber
sumber
Jawaban:
J, 7 byte
Ini adalah kata kerja monadik tanpa nama yang mengambil matriks dan mengembalikan daftar antidiagonal:
Uji di sini.
Penjelasan
/.
adalah built-in J untuk menerapkan fungsi pada masing-masing anti-diagonal. Sayangnya, anti-diagonal ini diberikan dalam urutan yang berlawanan dari yang kita inginkan di sini.<@|.
, pertama-tama kita menerapkan|.
yang membalikkan anti-diagonal dan kemudian<
ke kotak itu (yang merupakan satu-satunya cara untuk mengembalikan array yang compang-camping di J, karena array normal selalu persegi panjang, sehingga antidiagonal akan diisi dengan nol).sumber
Python, 91 byte
Uji di Ideone .
Python + NumPy, 69 byte
Mengharapkan array NumPy 2D sebagai input dan mengembalikan daftar array NumPy. Uji di Ideone .
sumber
Jelly, 7 byte
Cobalah online!
Penjelasan
sumber
Mathematica,
5856 byteFungsi anonim, mengambil array bersarang.
sumber
Length[#]
mana
adalah\[Transpose]
. Dan mungkin yang lain dari aliasingLength
.Length@#&@@#
untuk ASCII hanya pada jumlah byte yang sama.CJam, 17 byte
Blok tanpa fungsi (fungsi) yang mengharapkan matriks pada tumpukan dan menggantinya dengan antidiagonalnya.
Uji di sini.
Ini (ditemukan oleh Sp3000) berfungsi untuk jumlah byte yang sama:
Penjelasan
Ini paling baik dijelaskan dengan sebuah contoh. Pertimbangkan input:
sumber
Python 2,
8887 byteSertakan 0s, zip, lalu hapus elemen falsy. Mengembalikan daftar tupel. Ini digunakan
map(None,...)
untuk melakukanzip_longest
(melapisi titik yang hilang denganNone
) danfilter(None,...)
untuk menghapus elemen palsu.Mengganggu, kita perlu menambahkan
[]
baris tambahan kemap
untuk menjamin bahwa daftar tupel dikembalikan, karenamap(None,*[[1]])
pengembalian[1]
daripada[(1,)]
matriks 1x1. Baris tambahan dihilangkan olehfilter
meskipun.(Terima kasih kepada @ Dennis untuk -1 byte)
sumber
Ruby,
6866 byteFungsi anonim.
sumber
Mathematica, 60 byte
di mana
karakter Unicode yang dibaca Mathematica sebagai\[Transpose]
operator postfix .Ini sedikit lebih lama daripada solusi Mathematica lainnya, tetapi saya pikir saya akan mempostingnya karena tidak menggunakan
Diagonals
built-in dan menggunakan pendekatan yang sama sekali berbeda.Penjelasan
Ini pertama transposes matriks (sedemikian rupa sehingga antidiagonals muncul dalam urutan yang benar jika matriks itu diratakan). Kemudian kita memetakan
List
sel-sel matriks bersama dengan indeks, yang mengubah setiap elemen matriksi
menjadi di{i, {x, y}}
manax
dany
merupakan koordinat elemen dalam matriks.Ini mendatar dimensi terluar, sehingga kita sekarang memiliki daftar datar elemen matriks (dengan koordinatnya) dalam urutan kolom-utama.
Ini mengelompokkan elemen-elemen tersebut dengan jumlah koordinatnya. Perhatikan bahwa antidiagonal adalah garis konstanta
x+y
, jadi ini sesuai dengan pengelompokan yang kita inginkan. Urutan dalam setiap grup dipertahankan. Sekarang kita hanya perlu menyingkirkan koordinat lagi. Ini dilakukan melalui agak samar:Ini memetakan fungsi di
#&@@@#&
atas setiap grup, yang dengan sendirinya berlaku#&
untuk setiap elemen dalam grup, dan#
hanyalah argumen pertama, yaitu elemen matriks asli.sumber
dibaca\[transpose]
?T
: reference.wolfram.com/language/ref/character/Transpose.html ...\[Transpose]
hanyalah transliterasi ASCII dari karakter Unicode itu. Menyalin karakter Unicode atau transliterasi ke dalam Mathematica akan berhasil.Oktaf, 77 byte
Dengan sedikit penyalahgunaan
accumarray
fungsi:Ini mendefinisikan fungsi anonim. Untuk menggunakannya, tetapkan ke variabel atau gunakan
ans
.Input adalah matriks dengan
:
pemisah baris. Output adalah array sel yang berisi array untuk setiap baris (setara dengan oktaf untuk array bergerigi). Ini ditampilkan oleh Oktaf yang menunjukkan indeks array sel dan isi dari masing-masing sel. Coba di sini .Untuk menampilkan hasil yang dipisahkan hanya oleh spasi dan baris baru: 83 byte
Anda juga bisa mencobanya di sini .
sumber
JavaScript (Firefox),
8675 byteDisimpan 11 byte berkat @Neil!
Bekerja di Firefox 30+. Mengambil array array.
sumber
a.concat(a[0]).slice(1)
untuk mendapatkan array dengan panjang yang tepat. Juga,[for(of)]
bukan ES6; Saya biasanya menuliskannya sebagai (Firefox 30+) atau semacamnya.concat
danslice
. Terima kasih!Oktaf,
6362 byteDihapus satu byte berkat
@DonMue ...@LuisMendo!Saya menempuh rute yang membosankan dan membuat antidiagonal menjadi hijau.
Sampel dijalankan pada ideone .
sumber
'uni'
ke'un'
Haskell,
8382 bytenimi menyimpan satu byte. Terima kasih!
sumber
Python, 128 byte (numpy)
sumber
lambda
hanya menggunakan lambda yang dapat Anda gunakan sebagai kiriman Anda.lambda A:[[A[U][I-U]for U in range(max(I-len(A)+1,0),min(len(A[0])-1,I)+1)]for I in range(len(A+A[0])-1)]
(seperti dalam revisi asli Anda) akan sedikit lebih pendek. Juga, Anda harus mengubahA[U][I-U]
untukA[I-U][U]
mendapatkan orientasi dari pertanyaan.Pyth ,
4117 byteCobalah online!
Terinspirasi oleh solusi @ Doorknob untuk masalah lain .
Bagaimana itu bekerja:
Upaya sebelumnya:
Cobalah online!
Bagaimana itu bekerja:
sumber
Groovy,
777375Mengambil array array sebagai input dan mengembalikan array array.
Cobalah
EDIT: Saya lupa untuk output anwser, setelah menambahkan skornya naik menjadi 75.
sumber