Anda akan diberi array 2-D dari bilangan bulat, dan panjang N. Tugas Anda adalah menemukan di dalam array garis lurus (horizontal, vertikal atau diagonal) elemen N yang menghasilkan jumlah total tertinggi, dan mengembalikan jumlah itu .
Contoh
N = 3, A =
3 3 7 9 3
2 2 10 4 1
7 7 2 5 0
2 1 4 1 3
Array ini memiliki 34 baris yang valid, termasuk
Vertical
[3] 3 7 9 3
[2] 2 10 4 1
[7] 7 2 5 0
2 1 4 1 3 [3,2,7] = 12
Horizontal
3 3 7 9 3
2 2 10 4 1
7 7 [2] [5] [0]
2 1 4 1 3 [2,5,0] = 7
Diagonal
3 3 [7] 9 3
2 2 10 [4] 1
7 7 2 5 [0]
2 1 4 1 3 [7,4,0] = 11
Garis maksimumnya adalah
3 3 7 [9] 3
2 2 [10] 4 1
7 [7] 2 5 0
2 1 4 1 3 [7,10,9] = 26
Catatan: garis mungkin tidak membungkus tepi array.
Input
- AX oleh Y 2-D array A, dengan X, Y> 0. Setiap elemen array berisi nilai integer yang mungkin positif, nol atau negatif. Anda dapat menerima array ini dalam format alternatif (mis. Daftar array 1-D) jika diinginkan.
- Satu, bilangan bulat positif N, tidak lebih besar dari maks (X, Y).
Keluaran
- Nilai tunggal yang mewakili jumlah baris maksimal yang dapat ditemukan dalam array. Perhatikan bahwa Anda tidak perlu memberikan elemen individual dari garis itu atau di mana letaknya.
Uji kasus
N = 4, A =
-88 4 -26 14 -90
-48 17 -45 -70 85
22 -52 87 -23 22
-20 -68 -51 -61 41
Output = 58
N = 4, A =
9 4 14 7
6 15 1 12
3 10 8 13
16 5 11 2
Output = 34
N = 1, A =
-2
Output = -2
N = 3, A =
1 2 3 4 5
Output = 12
N = 3, A =
-10 -5 4
-3 0 -7
-11 -3 -2
Output = -5
code-golf
array-manipulation
matrix
pengguna2390246
sumber
sumber
[[-10, -5, 4],[-3, 0, -7],[-11,-3,-2]]
->-5
(4 + -7 + -2
)Jawaban:
Jelly , 15 byte
Cobalah online!
Bagaimana itu bekerja
sumber
¥
sana ...$
membuat monad dariZṚ
, sementara¥
membuat angka dua dariZṚ
mana mengembalikan hasil dari fungsi yang sama (putar 90 CCW) yang diterapkan pada operan kirinya. Yang cocok dengan pola+ ×
dan evaluasiv+(λ×ρ)
(v = v , (M ZṚ¥ n)
dalam hal ini). Namun hanya menggunakan$
tidak berfungsi karena tidak ada+ F
pola dalam rantai diad.Bahasa Wolfram (Mathematica) , 73 byte
Cobalah online!
Bagaimana itu bekerja
Mengambil pertama
N
dan kemudian matriksA
sebagai input.Join@@Partition[#2,{#,#},1,1,-∞]
menemukan setiapN
denganN
submatrix dari matriksA
, diisi dengan di-∞
mana diperlukan untuk memastikan bahwa garis-garis yang keluar dari grid akan keluar dari berjalan.Untuk setiap blok yang kami hitung
Tr/@Join[#,#,{#,Reverse@#}]
: jejak (yaitu jumlah) dari setiap baris, jejak (yaitu jumlah) dari setiap kolom, jejak ( sebenarnya jejak, untuk pertama kalinya dalam sejarah golf kode Mathematica) dari blok , dan jejak blok dibalik.#
adalahTranspose@#
.Kemudian kita temukan
Max
semua ini.sumber
Max@BlockMap[Tr/@Join[#,#,{#,Reverse@#}]&,#2,{#,#},1]&
juga berfungsi. Tapi kita perlu pad dengan-∞
untuk menangani kasus-kasus di manaA
memiliki lebih sedikit dariN
baris atau kolom, danBlockMap
tidak mendukung padding.\[Transpose]
) dapat diketikkan sebagai\:f3c7
.Tr
digunakan sebagai jejak.Tr
jejak matriks telah muncul sebelumnya, tapi itu masih jarang dan mengejutkan.Mathematica,
135123 byteCobalah online!
sumber
Diagonal[s,#]
kes~Diagonal~#
, dan{{Transpose@#,#2},{Reverse@#,#2}}
ke{#|#2,Reverse@#|#2}
. (The tak patut ditulis adalah U + F3C7 =\[Transpose]
; TIO tampaknya tidak seperti ini, meskipun Alternatif:.{Transpose@#|#2,Reverse@#|#2}
)\[Transpose]
atau\:f3c7
(setidaknya yang terakhir lebih pendek dariThread@
) Namun jika jawabannya adalah Mathematica REPL (bukan script Mathematica), Anda dapat mengasumsikan solusi 3-byte.Jelly , 16 byte
Cobalah online!
sumber
µ;Z;UŒD$;ŒDṡ€⁴ẎS€Ṁ
JavaScript,
151129 byteFungsi kari mengambil dua argumen, yang pertama adalah array dari array angka, yang kedua adalah angka.
Berkat Arnauld , hemat 20+ byte.
Tampilkan cuplikan kode
sumber
1/s
bukannyas==s
harus bekerja seperti yang diharapkan.(s=(g=...)(n))>m?s:m
untuk(g=...)(n)>m?g(n):m
menghemat 1 byte.Jq 1,5 , 211 byte
Diharapkan input dalam
N
danA
, misalnya:Diperluas
Perhatikan bahwa tantangan ini pada dasarnya sama dengan masalah Project Euler 11
Cobalah online!
sumber
Python 2 ,
208184183176 byte-float("inf")
untuk menyatakan bahwa garis yang diperiksa mencapai di luar matriks daripada menghitung jumlah negatif dari semua elemen matriks.R,L=range,len
untuk mempersingkat fungsi bawaan dan menggunakany in R(L(A))...R(L(A[y]))
alih-alihy,Y in e(A)...x,_ in e(Y)
.float("inf")
ke9e999
.Cobalah online!
Penjelasan
sumber
R , 199 byte
Cobalah online!
Solusi rekursif. Untuk setiap elemen (i, j) dari matriks mengembalikan max antara jumlah di sepanjang baris, jumlah di sepanjang kolom, jumlah di sepanjang diagonal, dan hasil dari fungsi yang diterapkan ke (i + 1, j) dan (i, j +1). Hasil untuk kasus uji ditunjukkan dalam TIO.
sumber
Sekam , 14 byte
Cobalah online!
Berkat anti∂iagonals baru yang dibangun di sini, ini adalah jawaban yang cukup singkat :)
sumber
JavaScript 170 byte
masih mengusap bagian golf menambahkan 4 karakter lagi karena saya tidak mengelola kasus di mana maks adalah negatif dan N lebih besar dari 1
sumber
G=
tidak dihitung)a||M,b||M,c||M,d||M
bukana,b,c,d
?Python 2 ,
222218 byteCobalah online!
sumber