Jako dane wejściowe weź niepustą macierz / tablicę numeryczną zawierającą dodatnie liczby całkowite. Zwróć w tej kolejności sumy pierwszego wiersza i kolumny, a następnie drugiego wiersza i kolumny i kontynuuj, aż nie będzie już więcej wierszy ani kolumn.
Załóżmy, że dane wejściowe to:
2 10 10 2 4
9 7 7 2 9
1 7 6 2 4
7 1 4 8 9
Następnie dane wyjściowe powinny być:
45, 33, 16, 17
Ponieważ: 2+9+1+7+10+10+2+4=45, 7+7+1+7+2+9=33, 6+4+2+4=16, 8+9=17
.
Przypadki testowe:
Przypadki testowe mają następujący format:
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
Jako tablice:
[[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]]
To jest golf golfowy, więc wygrywa najkrótsze rozwiązanie w każdym języku.
10,7,7,1
drugi wiersz9,7,7,2,9
i suma to59
. I tak dalejOdpowiedzi:
MATL , 16 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
Rozważmy jako przykład dane wejściowe
Kod
&n:w:!Xl
buduje wektor kolumny[1; 2; 3; 4]
i wektor wiersza[1 2 3 4 5]
. NastępnieXl
oblicza minimum elementarne z rozgłoszeniem, które daje macierzX:
linearyzuje tę matrycę (w kolejności durowej kolumny) do wektora kolumny[1; 1; 1; 1; 1; 2; 2; ... ; 4]
. Ten wektor i zlinearyzowana matryca wejściowa, uzyskane jakoGX:
, są przekazywane jako dane wejściowe doaccumarray(... @sum)
funkcji lub1XQ
. To oblicza sumę drugiego wejścia pogrupowanego według wartości pierwszego wejścia.źródło
Galaretka , 3 bajty
Wypróbuj online!
Jak to działa
źródło
CJam ,
2318 bajtówAnonimowy blok oczekujący argumentu na stosie i pozostawiający wynik na stosie.
Wypróbuj online!
Wyjaśnienie
źródło
q~[{(:+\z}h;]2/::+p
[
. Ale jako blok myślę, że go potrzebuję, ponieważ nie musi on również przechwytywać całego stosu poniżej.05AB1E ,
1411 bajtówWypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6), 60 bajtów
Naiwne rozwiązanie może być lepszym sposobem.
źródło
Mathematica, 60 bajtów
Zainspirowany odpowiedzią MATL Luisa Mendo .
Objaśnienie:
Min~Array~Dimensions@#
konstruuje macierz podobną do następującej:Następnie
Pick[#,...,n]~Total~2
wybiera wpisy macierzy wejściowej odpowiadające liczbien
w dziwnej macierzy powyżej i sumuje je. W końcu...~Table~{n,Min[d=Dimensions@#]}
iteracja się kończyn
.To o 1 bajt mniej niż naiwne podejście:
źródło
Haskell,
5049 bajtówWypróbuj online!
Jeśli istnieje co najmniej jeden wiersz z co najmniej jednym elementem, wynikiem jest suma pierwszego wiersza i nagłówków wszystkich innych wierszy, po których następuje rekurencyjne wywołanie z ogonami wszystkich innych wierszy. We wszystkich innych przypadkach wynikiem jest pusta lista.
Edycja: Ørjan Johansen zapisał bajt. Dzięki!
źródło
Oktawa ,
6452 bajtyDzięki @StewieGriffin za uratowanie 1 bajtu!
Definiuje to anonimową funkcję.
Wypróbuj online!
Wyjaśnienie
Kod jest podobny do mojej odpowiedzi MATL (patrz wyjaśnienie tam).
Dwa bajty zostały zapisane za pomocą
1:size(x)
zamiast1:size(x,1)
, wykorzystując fakt, że1:[a b]
zachowuje się tak samo jak1:a
. Ponadto, dzięki Stewie, zapisano jeden bajt1:rows(x')
zamiast1:size(x,2)
.źródło
k, 19 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
05AB1E , 16 bajtów
Wypróbuj online! lub Wypróbuj wszystkie testy
źródło
Oktawa ,
6360 bajtówWypróbuj online!
Odpowiedź na tę macierz:
to wektor sum rzędów jego górnej części trójkątnej:
plus wektor sum kolumn w dolnej części trójkąta:
dokładnie taka jest moja odpowiedź.
źródło
Julia , 62 bajty
Działa rekurencyjnie, sumując całą macierz, a następnie odejmując sumę następnego bloku. Prawdopodobnie nie najskuteczniejsze podejście, ale całkiem intuicyjne.
źródło
Java 7, 248 bajtów
Wypróbuj tutaj.
Ogólne wyjaśnienie:
Powiedzmy, że tablica wejściowa ma wymiary 4x6. Pierwsza część kodu utworzy macierz temp i wypełni ją w następujący sposób:
A w drugiej części kodu zapętli tę macierz temp i zsumuje wszystkie wartości macierzy wejściowej dla każdej z odrębnych liczb w macierzy temp.
Objaśnienie kodu:
źródło
Perl 6 ,
6355 bajtów{($_ Z [Z] $_).kv.map(->\a,\b{b.flatmap(*[a..*]).sum -b[0;a]})}
$_
jest wejściem macierzy do funkcji anonimowej.skip
to macierz wejściowa z usuniętym pierwszym wierszem[Z] .skip
oznacza transpozycję macierzy wejściowej z usuniętym pierwszym wierszem; to znaczy transpozycja bez pierwszej kolumny$_ Z [Z] .skip
zamyka macierz wejściową za pomocą transpozycji-bez-pierwszej-kolumny, tworząc listę((first-row, first-column-sans-first-element), (second-row, second-column-sans-first-element), ...)
.kv
poprzedza każdą parę swoim indeksemmap({...})
odwzorowuje pary, używając funkcji, która przyjmuje swój pierwszy argument (indeks)$^a
i drugą (para wierszy / kolumn)$^b
$^b.flatmap(*[$^a..*]).sum
usuwa pierwsze$^a
elementy każdej pary wierszy / kolumn, a następnie sumuje wszystkie pozostałe elementyPo namyśle zdałem sobie sprawę, że zdejmowanie pierwszej kolumny transpozycji przed spakowaniem było równoważne odejmowaniu podwójnie przyczyniających się elementów ukośnych, jak w moim pierwszym rozwiązaniu. To pozwoliło mi usunąć to odejmowanie, a użycie każdego argumentu do funkcji mapowania tylko raz sprawiło, że
{...$^a...$^b...}
metoda przekazywania argumentów do funkcji anonimowej była bardziej wydajna niż oryginalna-> \a, \b {...a...b...}
.źródło
Vim,
66, 52 bajtówWypróbuj online!
Niewłaściwe narzędzie do pracy ...
źródło
Galaretka , 10 bajtów
Pełny program, który drukuje wartości
Wypróbuj online!
W jaki sposób?
źródło
Python + NumPy, 75 bajtów
Dane wejściowe to tablica liczb dwuwymiarowych.
Wypróbuj online
źródło
Python 2 , 97 bajtów
Wypróbuj online!
źródło
Pyth,
1615 bajtówBierze tablicę liczb w stylu pytona, zwraca tablicę sum.
Spróbuj!
Wyjaśnienie
źródło
GNU APL 1.7, 123 bajty
Rozwiązanie wymaga dwóch funkcji: jedna tworzy tablicę globalną, a druga wywołuje rekurencyjnie sumy do tej tablicy.
∇
rozpoczyna i kończy funkcję. Zarównof
ig
wziąć tablice jako argumenty (głównie 2D podgrupach). Można je utworzyć za pomocąX←rows cols ⍴ 1 2 3 4...
.R←⍬
przypisuje pusty wektor do zmiennej globalnejR
.g N
wywołuje drugą funkcję z tym samym argumentem co pierwszy.⍴N
podaje wymiaryN
; gdy jeden z wymiarów wynosi zero, nie ma więcej wierszy / kolumn do dodania.0∈⍴N
zwraca 1, jeśli w wymiarach jest zero.→2+2×0∈⍴N
rozgałęzia się do wiersza nr 2 plus 2 razy wartość zwracana przez∈
funkcję: jeśli nie ma zera,∈
zwraca 0, a funkcja rozgałęzia się do wiersza 2 (następny wiersz). Jeśli jest zero,∈
zwraca 1, a funkcja rozgałęzia się do linii 4 (na końcu funkcji, więcreturn
zasadniczo)./
jest operatorem redukcji. Stosuje lewy argument, który jest operatorem (+
) do każdego elementu na liście podanego jako prawy argument.N[1;]
daje cały pierwszy wiersz tabeli iN[;1]
daje pierwszą kolumnę.(+/N[1;])+(+/N[;1])-N[1;1]
sumuje pierwszy wiersz i kolumnę i odejmuje wartość w lewym górnym rogu, ponieważ zostaje dodana zarówno do sumy kolumny, jak i sumy wiersza.R←R,...
dołącza nowo obliczoną wartość do wektora globalnegoR
.Następnie funkcja wywołuje się (powtarza się, aż nie będzie więcej wierszy ani kolumn).
⊃
Operator pick uzyskuje określony element z listy.1⊃⍴N
podaje liczbę wierszy,2⊃⍴N
liczbę kolumn.⍳
daje wszystkie liczby od 1 do określonej liczby.↓
Operator spadek usuwa elementy z początku listy. Jeśli podajesz wiele indeksów podczas uzyskiwania dostępu do elementów z tabeli lub wektora (np.N[1 2 3]
), APL uzyskuje dostęp do każdego z nich. Dlatego1↓⍳1⊃⍴N
podaje indeksy każdego wiersza z wyłączeniem pierwszego (2, 3, 4, ..., N
) i1↓⍳2⊃⍴N
daje podobny wektor, ale dla kolumn.g N[1↓⍳1⊃⍴N;1↓⍳2⊃⍴N]
wywołuje funkcję ponownie, ale bez pierwszego wiersza lub kolumny.źródło
PHP, 76 bajtów
Wypróbuj online!
źródło
Mathematica, 116 bajtów
Formularz wejściowy
źródło
Clojure, 98 bajtów
Iteruje nad danymi wejściowymi za pomocą indeksów wierszy i kolumn (w bardzo szczegółowy sposób), tworzy mapę skrótów z minimum
i
ij
jako klucz, łączy mapy skrótów z+
mapą posortowaną, zwraca wartości.źródło
R, 102 bajty
zwraca anonimową funkcję; wypisuje wyniki na konsoli z końcowym znakiem nowej linii. Prawdopodobnie potrzebuję innego podejścia.
Iteruje po minimum wierszy i kolumn; wypisuje sumę
x[,1]
(pierwszej kolumny) ix[1,-1]
pierwszego wiersza z wyjątkiem pierwszego wpisu, a następnie ustawiax
się na macierz równąx[-1,-1]
(tj. zx
wyłączeniem pierwszego wiersza i kolumny). Niestety, po prostu ustawieniex=x[-1,-1]
powoduje awarię w przypadku macierzy kwadratowej, ponieważ gdyx
jest to 2x2, podzbiór zwraca raczej wektor niż macierz.Wypróbuj online!
źródło
Java 7,
280276 bajtówWypróbuj tutaj.
Alternatywne podejście w porównaniu do mojej poprzedniej odpowiedzi z tablicami, która w końcu jest krótsza niż ta na końcu (więc trochę zmarnowałem czas na wypróbowanie tego alternatywnego podejścia).
Ogólne wyjaśnienie:
Inspiracja z @Riley „niesamowite 05AB1E odpowiedź
Odpowiedź ta wykorzystuje listę i po każdym suma jest obliczana usuwa pierwszą kolumnę i pierwszy wiersz z listy matrix, jak poniżej:
Objaśnienie kodu:
źródło
Python, 93 bajty
Podobne do odpowiedzi mbomb007, ale bez NumPy
źródło