Otrzymasz 2-D tablicę A liczb całkowitych i długość N. Twoim zadaniem jest znalezienie w tablicy linii prostej (poziomej, pionowej lub ukośnej) N elementów, która daje najwyższą sumę całkowitą, i zwrócenie tej sumy .
Przykład
N = 3, A =
3 3 7 9 3
2 2 10 4 1
7 7 2 5 0
2 1 4 1 3
Ta tablica ma 34 poprawne linie, w tym
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
Maksymalna linia to
3 3 7 [9] 3
2 2 [10] 4 1
7 [7] 2 5 0
2 1 4 1 3 [7,10,9] = 26
Uwaga: linie mogą nie owijać się wokół krawędzi tablicy.
Wejścia
- AX według Y 2-D tablica A, przy X, Y> 0. Każdy element tablicy zawiera wartość całkowitą, która może być dodatnia, zero lub ujemna. Możesz zaakceptować tę tablicę w alternatywnym formacie (np. Listę tablic 1-D), jeśli chcesz.
- Pojedyncza dodatnia liczba całkowita N, nie większa niż max (X, Y).
Wynik
- Pojedyncza wartość reprezentująca maksymalną sumę linii, którą można znaleźć w tablicy. Pamiętaj, że nie musisz podawać poszczególnych elementów tej linii ani jej lokalizacji.
Przypadki testowe
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
użytkownik2390246
źródło
źródło
[[-10, -5, 4],[-3, 0, -7],[-11,-3,-2]]
->-5
(4 + -7 + -2
)Odpowiedzi:
Galaretka , 15 bajtów
Wypróbuj online!
Jak to działa
źródło
¥
...$
tworzy monadęZṚ
, podczas gdy¥
tworzy diadę, zZṚ
której zwraca wynik tej samej funkcji (obrót o 90 CCW) zastosowanej na jej lewym operandzie. Który pasuje do wzorca+ ×
i oceńv+(λ×ρ)
(v = v , (M ZṚ¥ n)
w tym przypadku). Jednak samo użycie$
nie działa, ponieważ nie ma+ F
wzorca w łańcuchu diadadowym.Wolfram Language (Mathematica) , 73 bajty
Wypróbuj online!
Jak to działa
Najpierw pobiera
N
macierz, a następnie macierzA
.Join@@Partition[#2,{#,#},1,1,-∞]
znajduje każdyN
wedługN
podmacierzy macierzyA
, wypełniony w-∞
razie potrzeby, aby upewnić się, że linie wychodzące z siatki nie będą działały.Dla każdego z tych bloków obliczamy
Tr/@Join[#,#,{#,Reverse@#}]
: ślad (tj. Suma) każdego wiersza, ślad (tj. Suma) każdej kolumny, ślad ( właściwie ślad, po raz pierwszy w historii golfowego kodu Mathematica) bloku , a ślad bloku odwrócony.#
jestTranspose@#
.Następnie znajdujemy
Max
wszystkie z nich.źródło
Max@BlockMap[Tr/@Join[#,#,{#,Reverse@#}]&,#2,{#,#},1]&
działa również 57 bajtów . Ale musimy uzupełnić,-∞
aby obsłużyć przypadki, w którychA
ma mniej niżN
wiersze lub kolumny iBlockMap
nie obsługuje wypełniania.\[Transpose]
) można wpisać jako\:f3c7
.Tr
jest używany jako ślad.Tr
jako śladu matrycy, ale wciąż jest to rzadkie i zaskakujące.Mathematica,
135123 bajtówWypróbuj online!
źródło
Diagonal[s,#]
dos~Diagonal~#
i{{Transpose@#,#2},{Reverse@#,#2}}
do{#|#2,Reverse@#|#2}
. (Niezadrukowane wynosi U = + F3C7\[Transpose]
; TIO nie wydaje się tak, jakby alternatywna.{Transpose@#|#2,Reverse@#|#2}
)\[Transpose]
lub\:f3c7
(przynajmniej ten drugi jest krótszy niżThread@
) Jednak jeśli odpowiedź brzmi Mathematica REPL (nie skrypt Mathematica), możesz założyć rozwiązanie 3-bajtowe.Galaretka , 16 bajtów
Wypróbuj online!
źródło
µ;Z;UŒD$;ŒDṡ€⁴ẎS€Ṁ
JavaScript,
151129 bajtówFunkcja Curry przyjmuje dwa argumenty, pierwszy to tablica tablic liczb, drugi to liczba.
Dzięki Arnauld zaoszczędź ponad 20 bajtów.
Pokaż fragment kodu
źródło
1/s
zamiasts==s
powinien działać zgodnie z oczekiwaniami.(s=(g=...)(n))>m?s:m
aby(g=...)(n)>m?g(n):m
zapisać 1 bajt.Jq 1,5 , 211 bajtów
Oczekuje danych wejściowych
N
iA
np .:Rozszerzony
Zauważ, że to wyzwanie jest w zasadzie takie samo jak problem 11 z Project Euler
Wypróbuj online!
źródło
Python 2 ,
208184183176 bajtów-float("inf")
do reprezentowania, że zaznaczona linia dotarła poza macierz zamiast obliczać ujemną sumę wszystkich elementów macierzy.R,L=range,len
skrócenia wbudowanych funkcji i użyciey in R(L(A))...R(L(A[y]))
zamiasty,Y in e(A)...x,_ in e(Y)
.float("inf")
w golfa9e999
.Wypróbuj online!
Wyjaśnienie
źródło
R , 199 bajtów
Wypróbuj online!
Rozwiązanie rekurencyjne. Dla każdego elementu (i, j) macierzy zwraca maksimum między sumą wzdłuż wiersza, sumą wzdłuż kolumny, sumą wzdłuż każdej przekątnej, a wynikiem funkcji zastosowanej do (i + 1, j) i (i, j + 1). Wyniki dla przypadków testowych są pokazane w TIO.
źródło
Łuska , 14 bajtów
Wypróbuj online!
Dzięki nowym wbudowanym funkcjom antyagonalnym jest to dość krótka odpowiedź :)
źródło
JavaScript 170 bajtów
nadal wycieram w części golfowej dodano 4 dodatkowe znaki, ponieważ nie udało mi się zrobić przypadku, w którym maksimum jest ujemne, a N jest większe niż 1
źródło
G=
nie jest liczony)a||M,b||M,c||M,d||M
zamiasta,b,c,d
?Python 2 ,
222218 bajtówWypróbuj online!
źródło