tło
Delty tablicy liczb całkowitych to tablica utworzona przez uzyskanie różnic między kolejnymi elementami. Na przykład, [1, 2, 4, 7, 3, 9, 6]
ma następujące delty: [1, 2, 3, -4, 6, -3]
.
Teraz zdefiniujemy delty macierzy liczb całkowitych jako delty każdego wiersza i każdej kolumny w nim zawartej.
Jako przykład:
Row deltas:
1 2 3 4 │ => [1, 1, 1]
4 5 6 7 │ => [1, 1, 1]
7 1 8 2 │ => [-6, 7, -6]
Column deltas (the matrix' columns have been rotated into rows for simplicity):
1 4 7 │ => [3, 3]
2 5 1 │ => [3, -4]
3 6 8 │ => [3, 2]
4 7 2 │ => [3, -5]
Co daje nam następującą listę delt macierzy:
[[1, 1, 1], [1, 1, 1], [-6, 7, -6], [3, 3], [3, -4], [3, 2], [3, -5]]
A ponieważ nie chcemy, aby się zagnieżdżały, spłaszczamy tę listę:
[1, 1, 1, 1, 1, 1, -6, 7, -6, 3, 3, 3, -4, 3, 2, 3, -5]
Zadanie
Twoim zadaniem jest zsumowanie wszystkich delt macierzy podanej jako dane wejściowe. Zauważ, że macierz będzie się składać tylko z nieujemnych liczb całkowitych.
Zasady
Obowiązują wszystkie standardowe zasady.
Możesz założyć, że macierz zawiera co najmniej dwie wartości w każdym wierszu i kolumnie, więc minimalny rozmiar to 2x2 .
Możesz wziąć matrycę w dowolnym rozsądnym formacie, o ile ją określisz.
Nie można zakładać, że macierz jest kwadratowa.
Jeśli to może pomóc zmniejszyć liczbę bajtów, to może ewentualnie podjąć liczbę wierszy i liczbę kolumn jako wejście, jak również (patrzy na ciebie C!).
To jest code-golf, więc wygrywa najkrótszy kod (w bajtach) w każdym języku !
Przypadki testowe
Dane wejściowe => Dane wyjściowe [[1, 2], [1, 2]] => 2 [[8, 7, 1], [4, 1, 3], [5, 5, 5]] => -9 [[1, 2, 3], [4, 5, 6], [7, 8, 9]] => 24 [[9, 9, 9, 9, 9], [9, 9, 9, 9, 9]] => 0 [[1, 3, 14], [56, 89, 20], [99, 99, 99]] => 256 [[1, 2, 3, 4], [4, 5, 6, 7], [7, 1, 8, 2]] => 9 [[13, 19, 478], [0, 12, 4], [45, 3, 6], [1, 2, 3]] => -72
ṁ
.APL,
1815 bajtówWypróbuj online!
źródło
+/∘∊(2-⍨/⍉⍪⊢)
Haskell , 60 bajtów
Wypróbuj online! Używa krótszej transpozycji, którą znalazłem jakiś czas temu.
Wyjaśnienie
e
to nieskończona lista pustych list i używana do transpozycji.z
jest skrótem dlazipWith
funkcji, ponieważ jest używana dwukrotnie.źródło
Brachylog , 13 bajtów
bazujący na projekcie @ sundar
Wyjaśnienie
⟨⟩
są brudząc się formatowanie, przepraszamWypróbuj online!
źródło
Pyth, 7 bajtów
Wypróbuj tutaj.
Moja pierwsza odpowiedź w języku golfowym! Dzięki @EriktheOutgolfer za -1 bajtów!
Wyjaśnienie
źródło
.t
może byćC
dla -1.Brachylog ,
2216 bajtówWypróbuj online!
(-6 bajtów inspirowanych sugestiami @ Kroppeb).
źródło
⟨t-h⟩
robi lewę. W rezultacie{⟨t-h⟩ᵐ+}R&\↰₁;R+
jest o 5 bajtów krótszy. Wypróbuj online!⟨≡{...}ᵐ\⟩+
zamiast{...}R&\↰₁;R+
zapisywania 2 bajtów. Wynik w⟨≡{⟨t-h⟩ᵐ+}ᵐ\⟩+
Wypróbuj online!⟨≡⟨t-h⟩ᵐ²\⟩c+
. Wypróbuj online!⟨≡{s₂ᶠc+ᵐ-}ᵐ\⟩+ṅ
Wypróbuj online! , więc zaktualizuję tę odpowiedź w tej wersji.Japt
-x
,11109 bajtówSpróbuj
Wyjaśnienie
źródło
SOGL V0.12 , 9 bajtów
Wypróbuj tutaj! (
→
dodano, ponieważ wymaga to danych wejściowych na stosie)Wyjaśnienie:
źródło
→
dodano, ponieważ wymaga to danych wejściowych na stosie - miałem na myśli to pytanie: czy dane wejściowe są automatycznie wypychane na stos? Jeśli tak nie jest i oczekuje, że dane wejściowe będą już obecne na stosie, czy nie powinieneś również dodać→
liczby bajtów? Nie jestem pewien, jak te sytuacje są obsługiwane. A może to jak funkcja?functionNameSingleChar\n
)Mathematica, 45 bajtów
Wejście
źródło
{#,Transpose@#}
(jak moja odpowiedź w języku Python)?Total[Differences/@{#,Thread@#},3]&
CJam , 19 bajtów
Dane wejściowe to lista list liczb. Wypróbuj online!
Wyjaśnienie
źródło
2few
dwukropki.MY, 9 bajtów
Wypróbuj online!
Ponieważ nie mogę pingować Dennisa na czacie, aby pobrać MOJE (z powodu zawieszenia), obecnie nie będzie to działać. (DziękiΔ
poprzednio nie sprawdzał przy odejmowaniu)komukolwiekDennis wyciągnął MOJE!W jaki sposób?
ωΔ
, przyrosty pierwszego argumentu wiersza poleceńω⍉Δ
, przyrosty transpozycji pierwszego argumentu wiersza poleceń, na jednej liście
ḟ
spłaszczyćΣ
, suma↵
, wynikźródło
APL (Dyalog Classic) , 12 bajtów
Wypróbuj online!
źródło
Pyt , 11 bajtów
Wyjaśnienie:
źródło