Zsumuj sumę i usuń moją macierz
Biorąc pod uwagę macierz / tablicę 2d w preferowanym języku
Wejście:
- Matryca zawsze będzie miała nieparzystą długość
- Matryca zawsze będzie idealnie kwadratowa
- Wartościami macierzy może być dowolna liczba całkowita w twoim języku (dodatnia lub ujemna)
Przykład:
1 2 3 4 5 6 7
2 3 4 5 6 7 8
3 4 50 6 7 8 9
4 5 6 100 8 9 10
5 6 7 8 -9 10 11
6 7 8 9 10 11 12
7 8 900 10 11 12 0
Definicje:
- „Numer centralny” jest zdefiniowany jako liczba, która ma taką samą liczbę liczb po lewej, prawej, w górę iw dół
W tym przypadku jego środkowa wartość to 100
- „Zewnętrzna powłoka” to zbiór liczb, których indeks xiy wynosi 0 lub rozmiar matrycy
1 2 3 4 5 6 7
2 8
3 9
4 10
5 11
6 12
7 8 900 10 11 12 0
Twoje zadanie:
Dodaj do centralnej liczby sumę każdego wiersza i kolumny po pomnożeniu wartości w każdym przez ich indeks 1
Na przykład pojedynczy rząd
4 5 6 7 8
dla każdej liczby
number * index + number * index.....
4*1 + 5*2 + 6*3 + 7*4 + 8*5 => 100
przykład:
2 -3 -9 4 7 1 5 => 61
-2 0 -2 -7 -7 -7 -4 => -141
6 -3 -2 -2 -3 2 1 => -10
8 -8 4 1 -8 2 0 => -20
-5 6 7 -1 8 4 8 => 144
1 5 7 8 7 -9 -5 => 10
7 7 -2 2 -7 -8 0 => -60
|
78 65 60 45 -15 -89 10 => 154
|
=> -16
- Dla wszystkich wierszy i kolumn łączymy te wartości ..
- Teraz sumujesz je też => 154-16 = 138
- Dodajesz ten numer do „numeru centralnego” i usuwasz „zewnętrzną powłokę” matrycy
0 -2 -7 -7 -7 => -88
-3 -2 -2 -3 2 => -15
-8 4 1+138 -8 2 => 395
6 7 -1 8 4 => 69
5 7 8 7 -9 => 26
19 69 442 30 -26
róbcie to, dopóki nie otrzymacie jednego numeru
-2 -2 -3 => -15
4 1060 -8 => 2100
7 -1 8 => 29
27 2115 5
- Dodaj 2114 + 2147 do 1060
- Usuń „zewnętrzną powłokę” i zdobądź 5321
- Teraz mamy tylko jeden numer
to jest wynik!
przypadki testowe:
-6
-6
-7 -1 8
-4 -6 7
-3 -6 6
2
6 7 -2 5 1
-2 6 -4 -2 3
-1 -4 0 -2 -7
0 1 4 -4 8
-8 -6 -5 0 2
-365
8 3 5 6 6 -7 5
6 2 4 -2 -1 8 3
2 1 -5 3 8 2 -3
3 -1 0 7 -6 7 -5
0 -8 -4 -9 -4 2 -8
8 -9 -3 5 7 8 5
8 -1 4 5 1 -4 8
17611
-9 -7 2 1 1 -2 3 -7 -3 6 7 1 0
-7 -8 -9 -2 7 -2 5 4 7 -7 8 -9 8
-4 4 -1 0 1 5 -3 7 1 -2 -9 4 8
4 8 1 -1 0 7 4 6 -9 3 -9 3 -9
-6 -8 -4 -8 -9 2 1 1 -8 8 2 6 -4
-8 -5 1 1 2 -9 3 7 2 5 -6 -1 2
-8 -5 -7 -4 -9 -2 5 0 2 -4 2 0 -2
-3 -6 -3 2 -9 8 1 -5 5 0 -4 -1 -9
-9 -9 -8 0 -5 -7 1 -2 1 -4 -1 5 7
-6 -9 4 -2 8 7 -9 -5 3 -1 1 8 4
-6 6 -3 -4 3 5 6 8 -2 5 -1 -7 -9
-1 7 -9 4 6 7 6 -8 5 1 0 -3 0
-3 -2 5 -4 0 0 0 -1 7 4 -9 -4 2
-28473770
Odpowiedzi:
MATL ,
3634 bajtówDane wejściowe to tablica 2D z
;
separatorem wierszyWypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Python 2.7, 229 bajtów
To moja pierwsza próba zrobienia czegoś takiego, więc mam nadzieję, że przestrzegałem wszystkich zasad w tym przesłaniu. Jest to tylko funkcja, która przyjmuje listę list jako swój parametr. Wydaje mi się, że podsumowanie sum i list może być nieco skrócone, ale było to dla mnie zbyt trudne. :RE
Dziękuję Easterly Irk za pomoc w ogoleniu kilku bajtów.
źródło
...) + sum([i*j...
->...)+sum([i*j...
), ale ogólnie świetny pierwszy post !!!!...]for ...
działa. Możesz usunąć co najmniej 2 takie miejsca. (koniec listy trafia w pętlę for)C #, 257 bajtów
oto odpowiedź nie esolang
bez golfa:
źródło
using System.Linq
iusing System
. Nie jestem jednak pewien, czy wymagają tego przepisy.System.Linq
. Inne języki, które wymagają importowania w celu korzystania z niektórych funkcji, przechodzą ten sam proces, więc uważam, że niesprawiedliwe jest założenie, że każdy moduł jest ładowany do pamięci w języku C #.J, 66 bajtów
Proste podejście oparte na procesie opisanym w wyzwaniu.
[:+/^:2#\*]+|:
dostaje sumę.]+(i.@,~=](]+*)<.@-:)@#*
jest szczególnie brzydkim sposobem na zwiększenie środka o sumę.[:}:@}."1@}:@}.
usuwa zewnętrzną powłokę. Prawdopodobnie jest na to lepszy sposób.Stosowanie
źródło
Brachylog , 114 bajtów
Jestem zaskoczony, że to nawet działa szczerze. Przynajmniej zdałem sobie sprawę, że Brachylog naprawdę potrzebuje „zmiany wartości tego elementu” jako wbudowanego…
Przykład użycia:
Wyjaśnienie
Bardziej czytelna (i dłuższa) wersja:
Po prostu wyjaśnię z grubsza, co robi każdy predykat (tj. Każda linia oprócz pierwszej, która jest predykatem głównym + predykat 1):
Główny predykat + predykat 1
{l1,?hh.|:2f:7a$\:7a&.}.
: Jeśli dane wejściowe mają tylko jeden wiersz, zakończ algorytm i zwróć jedyną wartość. W przeciwnym razie znajdź wszystkie wiersze spełniające predykat 2, następnie zastosuj predykat 7 na wynikowej macierzy, następnie predykat 7 na transpozycji, a następnie wywołaj rekurencyjnie.Predykat 2
:Im:I:?:3f.
: WeźI
th wiersz macierzy, znajdź wszystkie wartości tego wiersza, które spełniają predykat 3,I
i macierz jako dodatkowe dane wejściowe.Predykat 3
[L:I:M]h:JmN,Ll:2/D(IJ,M:4&:N+.;'(DIJ),N.)
:L
jest rzędem,I
jest indeksem wiersza,M
jest macierzą.N
jestJ
th elementemL
. Jeśli długośćL
podzielona przez 2 jest równa obuI
iJ
, wówczas wynik jest sumąN
z wynikiem predykatu 4 na macierzy. W przeciwnym razie wynik jest po prostuN
. Ten predykat zasadniczo odtwarza macierz, z tym wyjątkiem, że element środkowy jest dodawany do sumy.Predykat 4
$\:?c:5a+.
: Zastosuj predykat 5 w każdym wierszu i kolumnie macierzy, ujednolic dane wyjściowe z sumą wyników.Predykat 5
:6f+.
: Znajdź wszystkie prawidłowe wyniki predykatu 6 w wierszu, ujednolic dane wyjściowe z sumą wynikowej listy.Predykat 6
:ImN,I:1+:N*.
:N
toI
th wartość wiersza, zunifikuj wynik za pomocąN * (I+1)
.Predykat 7
brbr.
: Usuń pierwszy i ostatni wiersz macierzy.źródło
APL, 56 znaków
Po angielsku:
⍣(⌊.5×≢⍵)
powtórz razy „połowę wielkości zaokrąglonego wymiaru”(⍵⍪⍉⍵)+.×⍳≢⍵
iloczyn wewnętrzny macierzy i jej transpozycja z wektorem indeksu(-⍴⍵)↑(⌈.5×⍴⍵)↑
przekształcenie wyniku w macierzy wypełnionej zerami1 1↓¯1 ¯1↓
usuwa powłokę zewnętrznąźródło