Dla każdego wiersza, a następnie kolumny macierzy, możemy dodać dodatkowy wpis z sumą dwóch ostatnich wpisów w tym wierszu lub kolumnie. Na przykład z następującą matrycą wejściową:
[ 1 1 1 ]
[ 2 3 4 ]
Otrzymana macierz wyglądałaby następująco:
[ 1 1 1 2 ]
[ 2 3 4 7 ]
[ 3 4 5 9 ]
Biorąc pod uwagę liczbę całkowitą N i macierz [X, Y] o wielkości co najmniej 2x2, wykonaj powyższe rozszerzenie N razy i wyślij wynik. Otrzymana macierz będzie zawsze miała rozmiar [X + N, Y + N].
Przykłady:
Input: Output:
2, [ 0 0 ] [ 0 0 0 0 ]
[ 0 0 ] [ 0 0 0 0 ]
[ 0 0 0 0 ]
[ 0 0 0 0 ]
3, [ 1 1 1 ] [ 1 1 1 2 3 5 ]
[ 2 3 4 ] [ 2 3 4 7 11 18 ]
[ 3 4 5 9 14 23 ]
[ 5 7 9 16 25 41 ]
[ 8 11 14 25 39 64 ]
2N
razy niż zapętlenie dwaN
razy?2*
(notacja postfiksowa). Może powinien mieć wbudowaną jedną postać, jest często używany. Również2^
(kwadrat). Ale brakuje mi miejsca na kod :-)J, 19 bajtów
Definiuje przysłówek, który bierze liczbę po lewej stronie i tworzy czasownik przyjmujący macierz po prawej stronie. W drugim przykładzie daje
Wyjaśnienie
źródło
K, 23 bajty
W akcji:
Wypróbuj tutaj .
źródło
{x
i końcowey}
Galaretka,
151312 bajtów-1 bajt @Dennis
Podobnie jak odpowiedź MATL @ LuisMendo, transponuje tablicę przed transformacją wzdłuż jednej osi. Dlatego musimy wywołać funkcję 2 * n razy.
Wypróbuj tutaj .
źródło
ES6, 134 bajty
Wyjaśnienie:
źródło
Haskell, 67 bajtów
Przykład użycia:
Jak to działa:
źródło
sudo apt-get install haskell-platform
i korzystam zghci
REPL, co daje miPrelude>
monit. Kiedy wklejamo%m=m++[o(+)(last m)$last$init m]
, dostaję<interactive>:2:4: parse error on input '='
. Czy możesz dać mi trochę primera, uruchamiając to z pliku źródłowego lub w REPL?o%m=...
linię (i tylko tę linię) w pliku o nazwie, powiedzmyfib-matrix.hs
. Następnie możesz użyć:l fib-matrix.hs
polecenia in,ghci
aby załadować definicje i wywołać funkcję główną, tak jak opisano w moim przykładzie użycia. - Lub użyjlet o%m=... in ( (!!). ... ) [[1,1,1]...] 3
.f=
przed drugą linię:f=(!!).iterate...
zapisz obie linie w pliku i załaduj jąl: <filename.hs>
. Potem możesz zadzwonićf [[1,1,1],[2,3,4]] 3
itp.CJam,
1716 bajtówFormat wejściowy to najpierw matryca (jako tablica 2D typu CJam), a następnie liczba iteracji.
Sprawdź to tutaj.
Wyjaśnienie
Okazuje się, że jest to to samo rozwiązanie, co wszystkich innych:
źródło
Poważnie, 20 bajtów
Następnie przyjmuje macierz (jako listę 2D)
N
. Generuje listę 2D.Ta wersja z jakiegoś powodu nie działa z tłumaczem online, ale działa z tym zatwierdzeniem przed wyzwaniem .
Wersja działająca online dla 23 bajtów:
Pobiera dane wejściowe w odwrotnej kolejności (
N
następnie macierz).Wypróbuj online!
Dodam wyjaśnienie po krótkiej chwili snu. Praca z błędami tłumacza nigdy nie jest przyjemna.
źródło
Pyth,
1312 bajtówWypróbuj online. Zestaw testowy.
Używa tego samego algorytmu do większości odpowiedzi. Pobiera jako dane wejściowe macierz jako tablicę 2D w pierwszym wierszu i
n
w drugim wierszu.Wyjaśnienie
źródło
Matlab, 60 bajtów
Po raz pierwszy bawiłem się fantazyjnymi metodami indeksowania Matlaba (tj.
A(end+1,:)=sum...
), Zanim zorientowałem się, że w tym rzadkim przypadku prosta konkatenacja jest w Matlabie tańsza. Szkoda, że musiałem przekonwertować to na rzeczywistą funkcję. Powinien również współpracować z Octave.Przypuszczam, że jest to doskonały przykład tego, jak nie tworzyć algorytmów. Dla A = 2x2, n = 1000 ten algorytm zajmuje już 5 sekund na moim laptopie, n = 2000 to prawie 50 sekund! (lub około 30 sekund, jeśli A to
gpuArray
dzięki mojemu zaufanemu Quadro 1000M)źródło
f([0,1;2,3],1000)
f.m
. 2) Uruchomoctave
. 3) Wklejload f.m; f([1,1,1;2,3,4],3)
do monitu REPL - działa dla mnie.Java, 2179 bajtów
Właśnie to wypracowałem: - Ten kod jest w języku Java.
źródło
{}
u góry pola edycji - spowoduje to automatyczne prefiksowanie.Python, 103
105bajtówFunkcja anonimowa pobiera listę i przechodzi do funkcji rekurencyjnej
f
. Dane wyjściowe są transponowane, a następnie przekazywanef
ponownie, a następnie dane wyjściowe drugiego uruchomienia są ponownie transponowane. Dane wyjściowe to lista krotekZaoszczędź dwa bajty dzięki bakuriu
źródło
n>0
może po prostu byćn
, ponieważ zaczynasz od pozytywu,n
a kiedy osiągasz,0
jego wartość jest fałszywa.APL (Dyalog Classic) , 17 bajtów
Wypróbuj online!
źródło
Perl 6 ,
87 7371 bajtówStosowanie:
źródło
perl6
powoduje błędy . Jestem początkującym perlem - co robię źle?my &code = ->\c,\m{ … }
aby wyjaśnić, że->\c,\m{ … }
należy zastąpić powyższym kodem. Zwykle używam niejawnych$_
lub@_
jawnych parametrów zastępczych,$^a
ponieważ są one zwykle krótsze. Po prostu o tym nie myślałem. Upewnij się także, że używasz wystarczająco nowej wersji ($*PERL.compiler.version !before 2015.12
)m:
znakiem spacją). Możesz także msg camelia bezpośrednio