Ambil array matriks / numerik yang tidak kosong yang berisi bilangan bulat positif sebagai input. Kembali, dalam urutan ini, jumlah dari baris dan kolom pertama, lalu baris dan kolom kedua dan lanjutkan sampai tidak ada lagi baris atau kolom.
Misalkan inputnya adalah:
2 10 10 2 4
9 7 7 2 9
1 7 6 2 4
7 1 4 8 9
Maka outputnya harus:
45, 33, 16, 17
Karena: 2+9+1+7+10+10+2+4=45, 7+7+1+7+2+9=33, 6+4+2+4=16, 8+9=17
.
Kasus uji:
Test case ada dalam format berikut:
Input
---
Output
5
---
5
..........
1 4
----
5
..........
7
2
---
9
..........
8 3 7 10 3 7 10 1
10 7 5 8 4 3 3 1
1 6 4 1 3 6 10 1
2 3 8 2 8 3 4 1
---
62 40 33 18
..........
30 39 48 1 10 19 28
38 47 7 9 18 27 29
46 6 8 17 26 35 37
5 14 16 25 34 36 45
13 15 24 33 42 44 4
21 23 32 41 43 3 12
22 31 40 49 2 11 20
---
320 226 235 263 135 26 20
..........
7 10 1
4 4 2
6 3 4
1 4 10
5 7 6
---
34 20 20
Sebagai array:
[[5]]
[[1,4]]
[[7],[2]]
[[8,3,7,10,3,7,10,1],[10,7,5,8,4,3,3,1],[1,6,4,1,3,6,10,1],[2,3,8,2,8,3,4,1]]
[[30,39,48,1,10,19,28],[38,47,7,9,18,27,29],[46,6,8,17,26,35,37],[5,14,16,25,34,36,45],[13,15,24,33,42,44,4],[21,23,32,41,43,3,12],[22,31,40,49,2,11,20]]
[[7,10,1],[4,4,2],[6,3,4],[1,4,10],[5,7,6]]
Ini adalah kode-golf sehingga solusi terpendek dalam setiap bahasa menang.
10,7,7,1
, baris kedua adalah9,7,7,2,9
dan jumlahnya adalah59
. Dan seterusnyaJawaban:
MATL , 16 byte
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Pertimbangkan, sebagai contoh, input
Kode
&n:w:!Xl
membangun vektor kolom[1; 2; 3; 4]
dan vektor baris[1 2 3 4 5]
. KemudianXl
menghitung elemen minimum dengan siaran, yang memberikan matriksX:
linearkan matriks ini (dalam urutan kolom-utama) ke dalam vektor kolom[1; 1; 1; 1; 1; 2; 2; ... ; 4]
. Vektor ini dan matriks input linierisasi, diperoleh sebagaiGX:
, dilewatkan sebagai input keaccumarray(... @sum)
fungsi, atau1XQ
. Ini menghitung jumlah input kedua yang dikelompokkan berdasarkan nilai input pertama.sumber
Jelly , 3 byte
Cobalah online!
Bagaimana itu bekerja
sumber
CJam ,
2318 byteBlok anonim mengharapkan argumen di stack dan membiarkan hasilnya di stack.
Cobalah online!
Penjelasan
sumber
q~[{(:+\z}h;]2/::+p
[
. Tetapi sebagai blok saya pikir saya membutuhkannya karena ia tidak perlu menangkap seluruh tumpukan di bawah ini juga.05AB1E ,
1411 byteCobalah online!
Penjelasan
sumber
JavaScript (ES6), 60 byte
Solusi naif, mungkin cara yang lebih baik.
sumber
Mathematica, 60 byte
Terinspirasi oleh jawaban MATL dari Luis Mendo .
Penjelasan:
Min~Array~Dimensions@#
membuat matriks seperti berikut:Kemudian
Pick[#,...,n]~Total~2
mengambil entri dari matriks input yang sesuai dengan nomorn
dalam matriks aneh di atas, dan menjumlahkannya. Akhirnya...~Table~{n,Min[d=Dimensions@#]}
iterates overn
.Ini 1 byte lebih pendek dari pendekatan naif:
sumber
Haskell,
5049 byteCobalah online!
Jika setidaknya ada satu baris dengan setidaknya satu elemen, hasilnya adalah jumlah dari baris pertama dan kepala dari semua baris lainnya diikuti oleh panggilan rekursif dengan ekor semua baris lainnya. Dalam semua kasus lain, hasilnya adalah daftar kosong.
Sunting: Ørjan Johansen menyimpan satu byte. Terima kasih!
sumber
Oktaf ,
6452 byteTerima kasih kepada @StewieGriffin karena telah menghemat 1 byte!
Ini mendefinisikan fungsi anonim.
Cobalah online!
Penjelasan
Kode ini mirip dengan jawaban MATL saya (lihat penjelasan di sana).
Dua byte telah disimpan menggunakan
1:size(x)
alih-alih1:size(x,1)
, mengeksploitasi fakta yang1:[a b]
berperilaku sama dengan1:a
. Juga, satu byte telah disimpan menggunakan1:rows(x')
bukan1:size(x,2)
, terima kasih kepada Stewie.sumber
k, 19 byte
Cobalah online!
Penjelasan:
sumber
05AB1E , 16 byte
Cobalah online! atau Coba semua tes
sumber
Oktaf ,
6360 byteCobalah online!
Jawaban untuk matriks ini:
adalah vektor jumlah baris dari bagian segitiga atasnya:
ditambah vektor jumlah kolom bagian segitiga bawahnya:
yang tepatnya jawaban saya adalah komputasi.
sumber
Julia , 62 byte
Bekerja secara rekursif dengan menjumlahkan seluruh matriks dan kemudian mengurangi jumlah blok berikutnya. Mungkin bukan pendekatan yang paling efektif, tetapi intuitif baik.
sumber
Java 7, 248 byte
Coba di sini.
Penjelasan umum:
Katakanlah array input memiliki dimensi 4x6. Bagian pertama dari kode akan membuat matriks temp dan mengisinya sebagai berikut:
Dan di bagian kedua kode itu akan mengulangi matriks temp ini, dan menjumlahkan semua nilai input-matriks untuk masing-masing angka yang berbeda dalam matriks temp.
Penjelasan kode:
sumber
Perl 6 ,
6355 byte{($_ Z [Z] $_).kv.map(->\a,\b{b.flatmap(*[a..*]).sum -b[0;a]})}
$_
adalah input matriks ke fungsi anonim.skip
adalah matriks input dengan baris pertama dihapus[Z] .skip
adalah transpos dari matriks input dengan baris pertama dihapus; yaitu, transpos tanpa kolom pertama$_ Z [Z] .skip
zip matriks input dengan kolom transpose-sans-first-nya, menghasilkan daftar((first-row, first-column-sans-first-element), (second-row, second-column-sans-first-element), ...)
.kv
awalan setiap pasangan dengan indeksnyamap({...})
memetakan pasangan, menggunakan fungsi yang mengambil argumen pertama (indeks)$^a
dan yang kedua (pasangan baris / kolom) di$^b
$^b.flatmap(*[$^a..*]).sum
menghapus$^a
elemen pertama dari setiap pasangan baris / kolom, lalu menjumlahkan semua elemen yang tersisaSetelah beberapa pemikiran saya menyadari bahwa melepaskan kolom pertama dari transpos sebelum zipping sama dengan mengurangi elemen diagonal yang berkontribusi ganda, seperti dalam solusi pertama saya. Itu membuat saya menghapus pengurangan itu, dan menggunakan setiap argumen untuk fungsi pemetaan hanya sekali membuat
{...$^a...$^b...}
metode meneruskan argumen ke fungsi anonim lebih efisien daripada yang asli-> \a, \b {...a...b...}
.sumber
Vim,
66, 52 bytesTry it online!
The wrong tool for the job...
sumber
Jelly, 10 bytes
A full program that prints the values
Try it online!
How?
sumber
Python + NumPy, 75 bytes
Input is a 2D numpy array.
Try it online
sumber
Python 2, 97 bytes
Try it online!
sumber
Pyth,
1615 bytesTakes a python-style array of arrays of numbers, returns an array of sums.
Try it!
Explanation
sumber
GNU APL 1.7, 123 bytes
Solution requires two functions: one creates a global array and the calls the second, which recursively appends the sums to that array.
∇
begins and ends the function. Bothf
andg
take tables as arguments (essentially 2D arrays). These can be created withX←rows cols ⍴ 1 2 3 4...
.R←⍬
assigns an empty vector to global variableR
.g N
calls the second function with the same argument given to the first.⍴N
gives the dimensions ofN
; when one of the dimensions is zero, there are no more rows/columns to add up.0∈⍴N
returns 1 if there is a zero in the dimensions.→2+2×0∈⍴N
branches to line number 2 plus 2 times the return value of the∈
function: if there is no zero,∈
returns 0 and the function branches to line 2 (the next line). If there is a zero,∈
returns 1 and the function branches to line 4 (the end of the function, soreturn
essentially)./
is the reduce operator. It applies the left argument, which is an operator (+
) to every element in the list given as the right argument.N[1;]
gives the entire first row of the table andN[;1]
gives the first column.(+/N[1;])+(+/N[;1])-N[1;1]
sums the first row and column and subtracts the value in the upper left corner because it gets added both in the column sum and the row sum.R←R,...
appends the newly calculated value to the global vectorR
.The function then calls itself (recurse until no more rows or columns). The
⊃
pick operator obtains the specified element from the list.1⊃⍴N
gives the number of rows,2⊃⍴N
the number of columns.⍳
gives all numbers from 1 to the specified number. The↓
drop operator removes elements from the beginning of the list. If you give multiple indices when accessing elements from a table or vector (e.g.N[1 2 3]
), APL accesses each one. Therefore,1↓⍳1⊃⍴N
gives the indices of each row excluding the first one (2, 3, 4, ..., N
) and1↓⍳2⊃⍴N
gives a similar vector but for the columns.g N[1↓⍳1⊃⍴N;1↓⍳2⊃⍴N]
calls the function again but without the first row or column.sumber
PHP, 76 Bytes
Try it online!
sumber
Mathematica, 116 bytes
Input form
sumber
Clojure, 98 bytes
Iterates over the input with row and column indexes (in a very verbose manner), creates a hash-map with the minimum of
i
andj
as the key, merges hash-maps with+
into a sorted-map, returns values.sumber
R, 102 bytes
returns an anonymous function; prints the results to the console, with a trailing newline. I probably need a different approach.
Iterates over the minimum of the rows and columns; prints the sum of
x[,1]
(the first column) andx[1,-1]
the first row except for the first entry, then setsx
to be a matrix equal tox[-1,-1]
(i.e.,x
excluding its first row and column). Unfortunately, simply settingx=x[-1,-1]
causes it to fail in the case of a square matrix, because whenx
is 2x2, the subsetting returns a vector rather than a matrix.Try it online!
sumber
Java 7,
280276 bytesTry it here.
Alternative approach compared to my previous answer with arrays, which is still shorter than this one in the end (so I kinda wasted time trying this alternative approach).
General explanation:
Inspiration from @Riley's amazing 05AB1E answer
This answer uses a List and after every sum is calculated it removes the first column and first row from the List-matrix, like this:
Explanation of the code:
sumber
Python, 93 bytes
Similar to mbomb007's answer, but without NumPy
sumber