Można otrzymać kwadratową macierz liczb M i innymi dodatniej liczby całkowitej N , bezwzględnie mniejsze niż rozmiar M . Twoim zadaniem jest wygenerowanie wszystkich kwadratowych podmacierzy M o rozmiarze n .
Dla celów niniejszego wyzwanie, kwadratowy pod-macierzą jest grupą sąsiednich rzędach i kolumnach zawarte w M .
Formaty wejścia / wyjścia
Możesz dowolnie wybierać inne rozsądne formaty, to tylko niektóre przykłady.
Wejście
- Macierz w rodzimym typie macierzy (jeśli twój język ma taki)
- Tablica 2D (tablica tablic 1D, każda odpowiadająca jednemu wierszowi / jednej kolumnie)
- Tablica 1D (ponieważ macierz jest zawsze kwadratowa)
- Sznurek (wybrałeś odstępy, ale nie nadużywaj go w żaden sposób) itp.
Wynik
- Macierz macierzy.
- Tablica 4D, w której każdy element (lista 3D) reprezentuje podmacierze w rzędzie / kolumnie.
- Tablica 3D, w której każdy element (lista 2D) reprezentuje podmacierz.
- Reprezentacja ciągu wynikowych podmacierzy itp.
Okular
- Możesz wybrać, aby mieć rozmiar z M jak wejście zbyt. Gwarantuje to co najmniej 2 .
- Orientacja danych wyjściowych jest dowolna: możesz wybrać wyświetlanie podmacierzy jako list kolumn lub list wierszy, ale twój wybór musi być spójny.
- Możesz konkurować w dowolnym języku programowania i możesz przyjmować dane wejściowe i generować dane wyjściowe za pomocą dowolnej standardowej metody , zwracając uwagę, że te luki są domyślnie zabronione.
- To jest golf golfowy , więc wygrywa najkrótsze przesłanie (w bajtach) dla każdego języka .
Przykład
Biorąc pod uwagę n = 3 i M :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Możliwe podmacierze 3x3 to:
+ ------- + + -------- + 1 2 3 4 1 2 3 4 | 1 2 3 | 4 1 | 2 3 4 | + -------- + + -------- + | 5 6 7 | 8 5 | 6 7 8 | | 5 6 7 | 8 5 | 6 7 8 | | 9 10 11 | 12 9 | 10 11 12 | | 9 10 11 | 12 9 | 10 11 12 | + ------- + + -------- + | 13 14 15 | 16 13 | 14 15 16 | 13 14 15 16 13 14 15 16 + -------- + + -------- +
Rezultatem byłoby:
[[[1, 2, 3], [5, 6, 7], [9, 10, 11]], [[2, 3, 4], [6, 7, 8], [10, 11, 12]], [[5, 6, 7], [9, 10, 11], [13, 14, 15]], [[6, 7, 8], [10, 11, 12], [14, 15, 16]]]
Jak wspomniano powyżej, wynik:
[[[1, 5, 9], [2, 6, 10], [3, 7, 11]], [[2, 6, 10], [3, 7, 11], [4, 8, 12]], [[5, 9, 13], [6, 10, 14], [7, 11, 15]], [[6, 10, 14], [7, 11, 15], [8, 12, 16]]]
byłoby również do przyjęcia, jeśli zamiast tego zdecydujesz się zwrócić podmacierze jako listy wierszy.
Przypadki testowe
Wejścia M, n :
[[1,2,3],[5,6,7],[9,10,11]], 1
[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]], 3
[[100,-3,4,6],[12,11,14,8],[0,0,9,3],[34,289,-18,3]], 2
[[100,-3,4,6],[12,11,14,8],[9,10,11,12],[13,14,15,16]], 3
I odpowiednie wyniki (podmacierze podane jako listy wierszy):
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,2,3],[5,6,7],[9,10,11]],[[2,3,4],[6,7,8],[10,11,12]],[[5,6,7],[9,10,11],[13,14,15]],[[6,7,8],[10,11,12],[14,15,16]]]
[[[100,-3],[12,11]],[[-3,4],[11,14]],[[4,6],[14,8]],[[12,11],[0,0]],[[11,14],[0,9]],[[14,8],[9,3]],[[0,0],[34,289]],[[0,9],[289,-18]],[[9,3],[-18,3]]]
[[[100,-3,4],[12,11,14],[9,10,11]],[[-3,4,6],[11,14,8],[10,11,12]],[[12,11,14],[9,10,11],[13,14,15]],[[11,14,8],[10,11,12],[14,15,16]]]
Lub jako listy kolumn:
[[[1]],[[2]],[[3]],[[5]],[[6]],[[7]],[[9]],[[10]],[[11]]]
[[[1,5,9],[2,6,10],[3,7,11]],[[2,6,10],[3,7,11],[4,8,12]],[[5,9,13],[6,10,14],[7,11,15]],[[6,10,14],[7,11,15],[8,12,16]]]
[[[100,12],[-3,11]],[[-3,11],[4,14]],[[4,14],[6,8]],[[12,0],[11,0]],[[11,0],[14,9]],[[14,9],[8,3]],[[0,34],[0,289]],[[0,289],[9,-18]],[[9,-18],[3,3]]]
[[[100,12,9],[-3,11,10],[4,14,11]],[[-3,11,10],[4,14,11],[6,8,12]],[[12,9,13],[11,10,14],[14,11,15]],[[11,10,14],[14,11,15],[8,12,16]]]]
code-golf
array-manipulation
matrix
Pan Xcoder
źródło
źródło
Odpowiedzi:
05AB1E , 8 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
MATL , 4 bajty
Dane wejściowe są
n
zatemM
.Dane wyjściowe to macierz, w której każda kolumna zawiera wszystkie kolumny podmacierzy.
Wypróbuj online!
Wyjaśnienie
Mówiąc poważniej,
t
bierze domyślnie dane wejściowe n i kopiuje je na stosie.h
konkatenuje obie kopie n , tworząc tablicę [n, n] .YC
przyjmuje niejawnie dane wejściowe M , wyodrębnia wszystkie bloki o rozmiarze [n, n] i układa je jako kolumny w porządku głównym kolumny. Oznacza to, że kolumny każdego bloku są ułożone pionowo w celu utworzenia pojedynczej kolumny.źródło
APL (Dyalog Unicode) , 26 bajtów SBCS
Anonimowy przyrostek lambda traktujący n jako lewy argument, a M jako prawy argument.
Wypróbuj online!
{
…}
Anonimowa lambda gdzie⍺
lewy argument i⍵
prawy argument:⊢⍵
dają odpowiedni argument (⊢
wydzielane⍺ ⍺
z⍵
)⊢⌺⍺ ⍺
wszystkie⍺
-pod-⍺
podmacierze, w tym te nakładające się na krawędzie (te są wypełnione zerami)(
…)↓
Upuść następujące elementy liczbowe wzdłuż pierwszych dwóch wymiarów:⍺÷2
połowa⍺
¯1+
jeden negatywny plus to⌈
podsumowanie2⍴
cyklicznie r eshape do listy dwóch elementóws←
Przechowywać ws
(na s Hards)-
negować (tj. upuścić z tyłu)s↓
upuśćs
elementy wzdłuż pierwszego i drugiego wymiaru (od przodu)źródło
APL (Dyalog Unicode) , 31 bajtów
Wypróbuj online!
Inne podejście niż Adám.
źródło
⍉
w nie trywialnych przypadkach, to naprawdę opanowałeś programowanie tablic.R , 75 bajtów
Wypróbuj online!
Trwa
M
,N
iS
ize matrycy.Drukuje wynikowe macierze na standardowe wyjście;
drop=F
jest potrzebne, więc wN=1
przypadku, gdy indeksowanie nie upuszczadim
atrybutu i zwraca wartośćmatrix
zamiast avector
.źródło
J ,
118 bajtów-3 bajty dzięki milom
Wypróbuj online!
źródło
<;._3~,~
i zamiast tego używa haka, aby sparować rozmiar z samym sobą, a następnie wycina i obciąża każdy, ponieważ matryca macierzy jest dozwolona jako wynik.Haskell , 67 bajtów
Wypróbuj online!
źródło
Galaretka , 5 bajtów
Wykorzystuje format wyjściowy 4D. W przypadku 3D, dodaj a
Ẏ
dla 6 bajtów .Wypróbuj online!
Jak to działa
źródło
ṡ€Zṡ€
.Brachylog , 13 bajtów
Wypróbuj online!
Zwraca listy kolumn.
Technicznie rzecz biorąc,
tN&s₎\;Ns₎
jest to predykat generujący, który ujednolica swój wynik z dowolnym z tych podmateriałów. Używamy{…}ᶠ
tylko do ujawnienia wszystkich możliwości.Wyjaśnienie
źródło
Stax , 10 bajtów
Uruchom
Reprezentacja ascii tego samego programu to
Działa to w ten sposób.
źródło
JavaScript (ES6), 91 bajtów
Pobiera dane wejściowe w składni curry
(a)(n)
. Zwraca wyniki jako listy wierszy.Przypadki testowe
Pokaż fragment kodu
źródło
APL (Dyalog Classic) ,
2423 bajtyWypróbuj online!
wynikiem jest macierz macierzy, chociaż formatowanie wyjściowe Dyalogu nie czyni tego bardzo oczywistym
wprowadź macierz (
⎕
), zamień każdy element w zagnieżdżoną macierz własnej (⍪¨
), weź prefiks konkatenacje według row (,\
) i kolumn (⍪⍀
), wpisz n (⎕
), upuść pierwsze n-1 wiersze i kolumny zagnieżdżonych macierzy ((¯1-t←-2⍴⎕)↓
), weź prawy dolny róg n-po-n z każdej matrycy (t∘↑¨
)źródło
Rubin , 63 bajty
Wypróbuj online!
Jest to lambda przyjmująca tablicę 2D i liczbę całkowitą, zwracająca tablicę 3D.
Nie golfowany:
źródło
Python 2 , 91 bajtów
Wypróbuj online!
źródło
def f(a,n):R=range(len(a)+1-n);print[[r[i:i+n]for r in a[j:j+n]]for i in R for j in R]
oszczędza pięć.