Biorąc pod uwagę listę liczb [ a 1 a 2 ... a n ] , oblicz sumę wszystkich macierzy Aᵢ, gdzie Aᵢ jest zdefiniowane w następujący sposób ( m jest maksimum wszystkich aᵢ ):
1 2 ⋯ (i-1) i (i+1) ⋯ n
+----------------------------
1 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
2 | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
. . . . . . . .
. . . . . . . .
aᵢ | 0 0 ⋯ 0 aᵢ aᵢ ⋯ aᵢ
aᵢ₊₁ | 0 0 ⋯ 0 0 0 ⋯ 0
. . . . . . . .
. . . . . . . .
m | 0 0 ⋯ 0 0 0 ⋯ 0
Przykład
Biorąc pod uwagę dane wejściowe, [2,1,3,1]
tworzymy następującą macierz:
[2 2 2 2] [0 1 1 1] [0 0 3 3] [0 0 0 1] [2 3 6 7]
[2 2 2 2] + [0 0 0 0] + [0 0 3 3] + [0 0 0 0] = [2 2 5 5]
[0 0 0 0] [0 0 0 0] [0 0 3 3] [0 0 0 0] [0 0 3 3]
Reguły i I / O
- możesz założyć, że dane wejściowe nie są puste
- możesz założyć, że wszystkie dane wejściowe są nieujemne (0 ≤)
- wejściem może być macierz 1 × n (lub n × 1), lista, tablica itp.
- podobnie wyjście może stanowić macierz, lista list, tablica itp.
- możesz pobierać i zwracać dane wejściowe za pomocą dowolnego domyślnego formatu we / wy
- Twoje zgłoszenie może być pełnym programem lub funkcją
Przypadki testowe
[0] -> [] or [[]]
[1] -> [[1]]
[3] -> [[3],[3],[3]]
[2,2] -> [[2,4],[2,4]]
[3,0,0] -> [[3,3,3],[3,3,3],[3,3,3]]
[1,2,3,4,5] -> [[1,3,6,10,15],[0,2,5,9,14],[0,0,3,7,12],[0,0,0,4,9],[0,0,0,0,5]]
[10,1,0,3,7,8] -> [[10,11,11,14,21,29],[10,10,10,13,20,28],[10,10,10,13,20,28],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,17,25],[10,10,10,10,10,18],[10,10,10,10,10,10],[10,10,10,10,10,10]]
Odpowiedzi:
Galaretka ,
105 bajtówWypróbuj online!
Jak to działa
źródło
R , 80 bajtów
Wypróbuj online!
Pobiera dane wejściowe ze standardowego wejścia; wypisuje
0x1
macierz wejściową0
, która wypisuje się podobnieźródło
F
jest wbudowana zmienna globalna, której wartość początkowa toFALSE
. Tutaj jest wymuszone na 0 i użyte jako wartość początkowa sumy skumulowanej. Ta odpowiedź pokazuje powód, aby nie używaćF
iT
oprócz kodu nigdy specjalnie zaprojektowany, aby być rzeczywiście używane!Haskell ,
706651 bajtówWypróbuj online!
źródło
JavaScript (ES6),
8879 bajtówZwraca
[]
za[0]
.Wypróbuj online!
źródło
APL (Dyalog Unicode) , 8 bajtów SBCS
Pełny program Monituje stdin o listę, drukuje matrycę na standardowe wyjście.
Wykorzystuje metodę Dennisa .
Wypróbuj online!
⎕
standardowe⍴⍨¨
r eshape-selfie każdego↑
zmieszaj listę list w macierz, wypełniając 0⍉
transponować+\
skumulowana suma wierszyNie
⍉
robi to żadnej różnicy obliczeniowej, więc potencjalnie można go pominąć i\
zmienić⍀
na sumowanie kolumnowe zamiast wierszowe.źródło
Python 2 , 85 bajtów
Wypróbuj online!
źródło
Oktawa , 64 bajty
Wypróbuj online!
Wyjaśnienie:
Jeszcze raz: Wyrażenia z listy argumentów i eval są używane w jednej funkcji :)
Pobiera to
x
dane wejściowe i tworzy dwie identyczne macierze wypełnione zerami o wymiarachk=a=zeros(length(x),max(x))
. Osiąga się to poprzez dodanie wektora poziomegox
z wektorem pionowym z1:max(x)
, niejawne rozszerzenie wymiarów do tablicy 2D, a następnie pomnożenie tego przez zero.~(x+...)
nie działa niestety, ponieważ to wymuszaa
to bycie logiczną tablicą przez resztę funkcji.for i=x
to pętla, która tworzy dla każdej iteracjii=x(1)
, wtedyi=x(2)
i tak dalej.a(1:i,k++:end)
jest częścią macierzy, którą należy aktualizować dla każdej iteracji.1:i
to wektor informujący, które wiersze należy zaktualizować. Jeślii=0
, to będzie to pusty wektor, więc nic nie zostanie zaktualizowane, w przeciwnym razie będzie1, 2 ...
.++k:end
zwiększak
macierz o jeden i tworzy zakres od pierwszej wartości tej macierzy (1,2,3...
) do ostatniej kolumnya
macierzy.+=i
dodaje bieżącą wartość doa
.end,a
kończy pętlę i wyjściaa
.źródło
GolfScript , 39 bajtów
Wypróbuj online!
Wykorzystuje algorytm Dennisa .
źródło
Wolfram Language (Mathematica) , 42 bajty
Wypróbuj online!
źródło
Java 10, 142 bajty
Wypróbuj online.
źródło
Rubinowy , 50 bajtów
Wypróbuj online!
źródło
Pari / GP , 60 bajtów
Wypróbuj online!
źródło