Wyzwanie:
Biorąc pod uwagę kwadratową macierz wejściową A , wypełnij macierz jednym rzędem i jedną kolumną ze wszystkich czterech stron.
- Wartość każdego elementu w górnym i dolnym rzędzie powinna być sumą elementów w każdej odpowiedniej kolumnie.
- Wartość każdego elementu w lewej i prawej kolumnie powinna być sumą elementów w każdym odpowiednim wierszu.
- Wartość elementów w lewym górnym rogu i prawym dolnym rogu powinna być sumą elementów na przekątnej
- Wartość elementów w prawym górnym rogu i lewym dolnym rogu powinna być sumą elementów w przekątnej.
Przykład:
A =
1 5 3
3 2 4
2 5 5
Output:
8 6 12 12 7
9 1 5 3 9
9 3 2 4 9
12 2 5 5 12
7 6 12 12 8
Wyjaśnienie:
Lewy górny i prawy dolny element są sumą przekątnej 1 + 2 + 5 = 8 . Górne prawe i lewe dolne elementy są sumą anty-przekątnej 2 + 2 + 3 = 7 .
Górny i dolny rząd (oprócz narożników) są sumą każdej kolumny w A : 1 + 3 + 2 = 6 , 5 + 2 + 5 = 12 i 3 + 4 + 5 = 12 . Podobnie, lewa i prawa kolumna (oprócz narożników) są sumą każdego wiersza A : 1 + 5 + 3 = 9 , 3 + 2 + 4 = 9 i 2 + 5 + 5 = 12 .
Wkład:
- Niepusta kwadratowa matryca z nieujemnymi liczbami całkowitymi.
- Opcjonalny format
Wydajność:
- Matryca wypełniona jak wyjaśniono powyżej
- Format opcjonalny, ale musi być taki sam jak format wejściowy
Przypadki testowe:
Użyj zgłoszeń w tym wyzwaniu, jeśli chcesz przekonwertować format wejściowy na bardziej odpowiedni (na przykład [[1, 5],[0, 2]]
).
0
----------------
0 0 0
0 0 0
0 0 0
1 5
0 2
----------------
3 1 7 5
6 1 5 6
2 0 2 2
5 1 7 3
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
----------------
65 65 65 65 65 65 65
65 17 24 1 8 15 65
65 23 5 7 14 16 65
65 4 6 13 20 22 65
65 10 12 19 21 3 65
65 11 18 25 2 9 65
65 65 65 65 65 65 65
15 1 2 12
4 10 9 7
8 6 5 11
3 13 14 0
----------------
30 30 30 30 30 30
30 15 1 2 12 30
30 4 10 9 7 30
30 8 6 5 11 30
30 3 13 14 0 30
30 30 30 30 30 30
To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie w każdym języku . Wyjaśnienia są bardzo zalecane.
źródło
Odpowiedzi:
Oktawa , 64 bajty
Dziękujemy Tomowi Carpenterowi za zapisanie 4 bajtów i naprawienie błędu, który miałem w oryginalnym kodzie!
Wypróbuj online!
Wyjaśnienie:
Uwaga: napisałem to długo po tym, jak opublikowałem wyzwanie.
źródło
Galaretka , 27 bajtów
Wypróbuj online!
źródło
MATL ,
2726 bajtówWypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
APL (Dyalog) , 37 bajtów
Wypróbuj online!
1 1∘⍉
przekątna (świeci zwinąć obie osie w jedną)d←
zapisz tę funkcję jako d i zastosuj ją do argumentu+⌿
dodaj sumy kolumnd∘⌽,
przedrostek d zastosowany do odwróconego argumentu(
…)⍪
Ułóż na górze następujące elementy:+/,⊢,+/
sumy wierszy, niemodyfikowany argument, sumy wierszy(
…)⍪
Ułóż na górze następujące elementy:d,+⌿,d∘⌽
zastosowane do argumentu, sumy kolumn, d zastosowane do odwróconego argumentuźródło
Galaretka , 26 bajtów
Wypróbuj online!
Wygląda zaskakująco inaczej niż rozwiązanie Erika .
W końcu udało mi się zrozumieć, jak
¦
działa (debugując kod Jelly, lol). Szkoda, że wymaga€
pracyÇ
w moim przypadku.Wyjaśnienie
Kod wykorzystuje trzy linki. Pierwsze łącze pomocnicze wypełnia wektor sumą na obu końcach, drugie łącze pomocnicze naprawia dwa rogi matrycy, a główne łącze odpowiednio je wywołuje.
źródło
Python 3 , 155 bajtów
Jest to sugestia @LeakyNun, która oszczędza 54 bajty . Potem sam trochę grałem w golfa.
Wypróbuj online!
Początkowe rozwiązanie - Python 3 , 216 bajtów
Wypróbuj online!
źródło
Python 2 ,
268250184174 bajtów10 dzięki Stewie Griffin
Wypróbuj online!
Kilka wyjaśnień Dane wejściowe są przesyłane jako macierz. Najpierw kod oblicza sumę każdej kolumny i każdego wiersza za pomocą numpy.sum. Następnie oblicza sumę przekątnej przez numpy.trace. Następnie uzyskuje drugą przekątną, wykonując lewy-prawy obrót matrycy. Na koniec używa numpy.vstack i numpy.hstack do sklejenia elementów.
źródło
R, 129 bajtów
Anonimowa funkcja, która przyjmuje na wejściu macierz kwadratową. Wyślę wyjaśnienie, jeśli będzie zainteresowanie.
źródło
PHP , 211 bajtów
Wypróbuj online!
Rozszerzony
źródło
Python 3 , 125 bajtów
Wypróbuj online!
Nieznacznie nie golfista:
Pobiera to dane sformatowane jako tablica liczb liczbowych, a następnie używa narzędzi indeksujących
np.c_
inp.r_
buduje nową tablicę za jednym razem.np.trace
inp.sum
służą do obliczania sum odpowiednio wzdłuż przekątnych i wszędzie indziej.T
służy do wykonania transpozycji przed i po konkatenacji sum, ponieważ jest krótszy niż uczynienie wszystkich tablic dwuwymiarowymi i użycienp.r_
.m[::-1]
oszczędza bajty w porównaniu dorot90(m)
lub wfliplr(m)
celu znalezienia śladu dla drugiej przekątnej.źródło
JavaScript (ES6), 170 bajtów
Dane wejściowe i wyjściowe to tablica liczb 2D.
Wyjaśnił
Test Snippet
Dane wejściowe / wyjściowe zostały sformatowane przy użyciu nowych linii i kart.
źródło
LOGO , 198 bajtów
Funkcja
f
przyjmuje macierz jako listę 2D, a następnie wyprowadza wynikową macierz.g
jest funkcją pomocniczą.źródło