Napisz program lub funkcję, w której macierz A (maksymalna wartość wymiarów macierzy wynosi 100) jest przekształcana w nową macierz B. Każdy element nowej macierzy B jest sumą dodatnich sąsiadów odpowiedniego elementu macierzy A .
Uwzględniani są tylko sąsiedzi w czterech prostopadłych kierunkach, a krawędzie się nie zawijają.
Przykładowe dane wejściowe:
1 2 3
4 -1 -2
-3 -4 10
1 2 10
Wynik:
6 4 2
1 6 13
5 12 10
2 11 12
Zasady:
- Jako dane wejściowe użyj liczb całkowitych.
- To jest golfowy kod , więc wygrywa najkrótszy kod w bajtach.
Odpowiedzi:
MATL , 9 bajtów
Wypróbuj online!
Wyjaśnienie
Macierz wejściowa jest mnożona przez odpowiednią maskę, aby wartości ujemne były równe 0. Następnie stosuje się splot 2D w celu obliczenia sumy sąsiadów każdego wpisu.
źródło
Oktawa,
464440 bajtówOszczędność2 bajtów dziękijądru @flawr@ LuisMendo była o 4 bajty krótsza niż w @ flawr.
Podobnie jak @ LuisMendo ! Tylko mniej ... golfa.
Możesz to zobaczyć tutaj na ideone .
źródło
(x='aba')~=x'
zamiast[0 1 0;1 0 1;0 1 0]
.*
to elementowe mnożenie macierzy. Matryca boolowska polega na tym, że MATLAB jest w dużej mierze bez typu, traktowany jako numeryczny. PoM>0
prostu działa jak maska.(x='aba')~=x'
. To po prostu niesamowite @Luis!JavaScript (ES6),
9994 bajtówAkceptuje i zwraca tablicę dwuwymiarową.
Edycja: Całkowicie przepisane, gdy odkryłem, że domyślne argumenty działają, gdy przekazujesz jawnie niezdefiniowaną wartość, na przykład gdy indeksujesz koniec tablicy.
źródło
JavaScript (ES6),
9593 bajtówźródło
Python z SciPy, 127 bajtów
To oblicza wynik przy użyciu metody Luisa Mendo .
Wypróbuj online
źródło
Mathcad, bajty
Używa standardowego splotu 2D filtrowanej macierzy z jądrem 3x3. Warianty z ujemnymi sumami elementów i jądrem ukośnym również zostały dodane jako kompensacja części dla programu, który nie działa przez co najmniej bajty.
Nie wprowadzono liczby bajtów, ponieważ ocena Mathcada nie została jeszcze ustalona. Jednak przy użyciu równoważności klawiatury jest to obszar 28 bajtów, przy założeniu, że dane wejściowe macierzy nie liczą się do sumy.
Zauważ, że to, co widzisz na powyższym obrazku, jest dokładnie tym, jak rozwiązanie jest wprowadzane i wyświetlane w Mathcadzie.
źródło
Galaretka,
232018 bajtówWypróbuj online!
Algorytm
Powiedzmy, że jest tylko jeden wiersz: [1,2,3,4].
Powiedzmy, że A jest wynikiem przygotowania zera, tj. [0,1,2,3,4].
B jest wynikiem usunięcia pierwszego elementu, tj. [2,3,4].
Następnie końcowy wynik jest po prostu wektoryzowany A + B, a następnie usuwa ostatni element.
Teraz algorytm ma zastosować to do każdego wiersza, a także do każdej kolumny, a następnie znaleźć ich wektoryzowaną sumę.
Do każdej kolumny ?! Myślałem, że Jelly nie obsługuje tego ...
Masz rację. Dlatego transponowałem go, zastosowałem do każdego rzędu, a następnie transponowałem ponownie.
Algorytm usuwania liczb ujemnych
Tutaj po prostu dodajesz do każdej liczby ich absolut. Skutecznie eliminuje liczby ujemne, podwajając każdą liczbę dodatnią. Następnie połowę całej matrycy.
źródło
Pyth, 36 bajtów
Wypróbuj online!
Bezpośrednie tłumaczenie mojej odpowiedzi w galarecie .
źródło