Ambil matriks bilangan bulat positif sebagai input, dan hasilkan jumlah individu dari elemen pada garis diagonal melalui matriks.
Anda hanya akan menghitung garis yang turun secara diagonal dan ke kanan. Anda harus mulai dengan diagonal yang hanya berisi elemen kiri-bawah, lalu panjang-dua diagonal di atasnya (jika ada) dan seterusnya hingga diagonal yang hanya berisi elemen kanan atas, seperti yang digambarkan di bawah ini.
Contoh:
Input:
8 14 5 1
10 5 5 8
6 6 8 10
15 15 4 11
Output:
15, 21, 20, 32, 29, 13, 1
(Diagonals: {{15},{6,15},{10,6,4},{8,5,8,11},{14,5,10},{5,8},{1}})
Input:
1
Output:
1
Input:
1 5
Output:
1, 5
Input:
4
1
Output:
1, 4
Input:
17 4 5
24 16 5
9 24 10
1 14 22
1 21 24
4 4 17
24 25 17
Output:
24, 29, 22, 39, 47, 70, 43, 9, 5
Format input dan output adalah opsional seperti biasa.
Ini adalah kode-golf , jadi pengiriman terpendek di setiap bahasa akan menang.
Jawaban:
Haskell ,
4037 byteCobalah online! Penggunaan:
(foldl1$(.(++z)).zipWith(+).(0:)) [[1,2,3],[4,5,6]]
.Sunting: Terima kasih Ørjan Johansen untuk -3 byte!
Tidak Disatukan:
z
adalah daftar angka nol tanpa batas. Dalamf
kita lipat daftar daftarm
dengan menggabungkan dua daftar dengan fungsi#
. Dalam#
daftar pertamas
berisi jumlah kolom akumulasi sejauh ini dan daftar keduat
adalah baris baru yang harus ditambahkan. Kami menggesers
satu elemen ke kanan dengan menambahkan nol ke depan dan menambahkans
dant
dengan elemenzipWith(+)
. Karenas
mungkin besar secara sewenang-wenang, kita harus mengisit
dengan cukup nol dengan menambahkanz
.sumber
foldl1$(.(++z)).zipWith(+).(0:)
.Mathematica,
5354 byteFungsi murni mengambil 2D-array sebagai input dan mengembalikan daftar. (Entri tidak harus bilangan bulat atau genap.)
Diagonal[#,k]
Mengembalikank
diagonal th di atas (atau di bawah, jikak
negatif) diagonal utama.{k,-l@#,l@#&@@#}
menghitung kisaran diagonal yang diperlukan berdasarkan dimensi array input. DanTr
jumlah entri masing-masing diagonal.sumber
Tr@Diagonal[m,#]&/@Range@@({-1,1}(Dimensions[m=#]-1))&
MATL , 6 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
sumber
s==sum(x(:))
, daripada tetap berpegang pada konvensi MATLAB, seperti yang tampaknya dilakukan MATL?sum(x)
dansum(x,1)
. Untuk matriksx
, fakta yangsum(x)
berperilaku berbeda jika matriks memiliki 1 baris terkadang menjengkelkan. Tetapi pada akhirnya saya memutuskan untuk pergi dengan Matlab, sehingga kedua bahasa lebih dekat; dan menambahkan beberapafun(x,1)
fungsi untuk kasus yang paling umumJelly , 5 byte
Cobalah online!
Bagaimana itu bekerja
sumber
ŒD
?ŒD
pemesanan aneh mencegahnya menjadi berguna.JavaScript (ES6),
6558 bytesumber
a=>a.map(r=>r.map(v=>s[i]=~~s[i++]+v,i=--y),s=[],y=a.length)&&s
CJam ,
2221 byteDisimpan 1 byte berkat Martin Ender
Blok anonim mengharapkan argumen di stack dan meninggalkan hasilnya di stack.
Cobalah online!
Bagaimana itu bekerja
sumber
05AB1E , 17 byte
Cobalah online!
Penjelasan
sumber
J , 7 byte
Cobalah online!
Ini cukup sederhana:
Garis terbalik miring adalah diagonal array, jadi ini hanya menjumlahkan diagonal.
sumber
Python 2 , 62 byte
Cobalah online!
sumber
Jelly , 8 byte
Cobalah online!
Setengah dari kode tersebut digunakan untuk menempatkan hasilnya dalam urutan yang benar.
Bagaimana?
sumber
Perl 5, 47 byte
sumber
R, 45 byte
Fungsi yang tidak disebutkan namanya mengambil objek kelas-matriks sebagai input:
Menggunakan ide yang dijelaskan dalam jawaban ini .
sumber
unname
, tetapi ini adalah solusi yang luar biasa!Oktaf, 71 byte
Mengasumsikan A adalah matriks, misalnya:
Maka kita memiliki:
Perhatikan bahwa transposing matriks membalikkan urutan jumlah diagonal, yang menyimpan dua byte keseluruhan dalam for loop.
Keluaran:
sumber
[m,n]=size(A);for i=1:m+n-1,trace([zeros(m-1,m);A'](i:end,:)),end
menghemat 6 byte. Oktaf dapat melakukan pengindeksan langsung dan penugasan sebaris. Sayangnya, dengan asumsi bahwa ada variabel di ruang kerja sebelum menjalankan kode tidak diperbolehkan, jadi saya pikir Anda harus menggunakaninput
, seperti ini membawanya kembali hingga 75 byte. Pendekatan yang bagus, jadi +1 dari saya :) Dan selamat datang di PPCG! =)zeros(m-1,m)
bisa ditulis~e(m-1,m)
, hemat 4 byte :) Rapi ya?Python, 126 byte
f
hanya berfungsi pada bagian segitiga bawah, jadi saya memindahkannya dan mendapatkan bagian segitiga atas dengan cara itu. Tidak tahu mengapaf
fungsi tidak bekerja untuk nilai negatif (saya berubahf
menjadi lebih pendek karena bagian untuk mendapatkan yang negatif tidak berfungsi).sumber
C, 148 byte
Coba Online
sumber
PHP, 81 Bytes
Ambil Input sebagai 2 D Array
Cobalah online!
sumber
Awk, 67 Bytes
Tidak Disatukan:
Awk splits pada whitespace
$n
adalahn
bidang ke-1 (1-diindeks);NF
adalah jumlah bidang pada baris,NR
adalah jumlah baris saat ini. Variabel yang tidak terdefinisi adalah 0 dan dibuat pada penggunaan pertama.sumber
PHP, 86 byte
solusi ramah memori dalam dua varian:
mengambil input dari parameter skrip, menggunakan garis bawah sebagai pembatas;
gunakan pengaturan default (bukan default php.ini) atau coba online
sumber
Clojure, 81 byte
Cukup bertele-tele, karena ini berisi daftar dengan nol sehingga kita bisa menghitung jumlah kolom-bijaksana.
sumber
Mathematica 73 byte
Yang ini berfungsi untuk APA SAJA 2D-array mxn (tidak hanya nxn)
masukkan array di akhir kode seperti ini (kasus uji terakhir)
masukan dalam bentuk [{a, b, c, d ...}, {m, n}]
sumber