Wkład:
- Liczba całkowita
n
- Dwie kwadratowe matryce o równej wielkości (ich szerokość / wysokość jest wielokrotnością
n
)
Wydajność:
Jedna z dwóch odrębnych wartości według własnego wyboru, jedna dla prawdziwych wyników, a druga dla wyników falsey (więc tak, 1/0
zamiast true/false
prawidłowych danych wyjściowych dla języków takich jak Java, nawet jeśli nie są one uważane za oficjalne wartości prawda / falsey ).
Dane wyjściowe truey / falsey wskazują, czy możemy zmienić kolejność bloków wielkości n by n
w jednej macierzy, aby była równa drugiej macierzy.
Przykład:
Wkład:
Matrix 1:
1 2 3 4 5 6
7 8 9 0 1 2
3 4 5 6 7 8
9 8 7 6 5 4
3 2 1 0 9 8
1 1 1 1 1 1
Matrix 2:
3 2 9 8 7 8
1 1 1 1 5 4
3 4 5 6 1 0
9 0 7 6 1 1
5 6 1 2 3 4
1 2 7 8 9 8
Integer n:
2
Wydajność: truthy
Czemu?
Jeśli podzielimy macierze na bloki 2 by 2
, możemy zobaczyć, że wszystkie bloki na jednej macierzy można również znaleźć w drugiej macierzy:
Matrix 1:
1 2 | 3 4 | 5 6
7 8 | 9 0 | 1 2
---------------
3 4 | 5 6 | 7 8
9 8 | 7 6 | 5 4
---------------
3 2 | 1 0 | 9 8
1 1 | 1 1 | 1 1
Matrix 2:
3 2 | 9 8 | 7 8
1 1 | 1 1 | 5 4
---------------
3 4 | 5 6 | 1 0
9 0 | 7 6 | 1 1
---------------
5 6 | 1 2 | 3 4
1 2 | 7 8 | 9 8
Zasady konkursu:
- Możesz założyć, że macierze będą zawierać tylko cyfry nieujemne (zakres
[0,9]
) - Możesz założyć, że szerokość / wysokość macierzy są równe i wielokrotność
n
- Możesz założyć
n
, że będzie w zakresie[1, 50]
, a szerokość / wysokość macierzy będzie w tym zakresie[1,100]
. - Poszczególne bloki
n by n
mogą być użyte tylko raz, aby ustalić, czy macierze są wzajemnymi permutacjami po podzieleniu na blokin by n
. - Może być wiele
n by n
takich samych bloków. - Te
n by n
bloki pozostaną w tej samej orientacji podczas sprawdzania, czy dwie macierze permutacji są od siebie, gdy podział na blokin by n
.
Główne zasady:
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Nie pozwól, aby języki gry w golfa zniechęcały Cię do publikowania odpowiedzi w językach niekodujących golfa. Spróbuj znaleźć możliwie najkrótszą odpowiedź na „dowolny” język programowania. - Do odpowiedzi mają zastosowanie standardowe reguły z domyślnymi regułami We / Wy , więc możesz używać STDIN / STDOUT, funkcji / metody z odpowiednimi parametrami i typem zwracanych, pełnych programów. Twoja decyzja.
- Domyślne luki są zabronione.
- Jeśli to możliwe, dodaj link z testem kodu (tj. TIO ).
- Zalecane jest również dodanie wyjaśnienia do odpowiedzi.
Przypadki testowe:
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 2
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 1
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 5 6 3 2 9 8 7 8 3
7 8 9 0 1 2 1 1 1 1 5 4
3 4 5 6 7 8 3 4 5 6 1 0
9 8 7 6 5 4 9 0 7 6 1 1
3 2 1 0 9 8 5 6 1 2 3 4
1 1 1 1 1 1 1 2 7 8 9 8
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 3 4 4
2 3 4 5 2 3 4 5
3 4 5 6 3 4 5 6
4 5 6 7 4 5 6 7
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 3 4 3 4 2
2 3 4 5 4 5 4 5
3 4 5 6 1 2 5 6
4 5 6 7 2 3 6 6
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 2 3 1
3 4 1 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
0 8 1
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 3 4 1 2 1 2 2
5 6 7 8 5 6 5 6
9 0 0 9 0 9 9 0
4 3 2 1 2 1 4 3
Output:
falsey
Input:
Matrix 1: Matrix 2: Integer:
1 2 1 2 9 5 1 2 2
3 4 3 4 7 7 3 4
8 3 9 5 1 2 8 3
6 1 7 7 3 4 6 1
Output:
truthy
Input:
Matrix 1: Matrix 2: Integer:
1 0 2 0 0 3 1 1 1 0 0 3 2
1 1 1 1 1 1 2 0 1 1 1 1
2 2 2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5 5 5
Output:
falsey
[ [ 0 ] ], [ [ 25 ] ], 1
obecny? Zrozumiałem,You can assume the matrices will only contain non-negative digits (range [0,9])
że wartości macierzy wynoszą tylko od 0 do 9?[0,9]
później w piaskownicy. Zmieniłem przypadek testowy na[[0]],[[8]]
.Odpowiedzi:
Galaretka ,
109 bajtówWypróbuj online! (lub z wstępnym przetwarzaniem dla łatwiejszego kopiowania i wklejania z przypadków testowych)
Dwójkowym link przyjmowania listę macierzach (jak listy list) po lewej stronie i po prawej całkowitą co daje
1
lub0
do truthy lub falsey odpowiednio.W jaki sposób?
źródło
APL (Dyalog Extended) ,
191817 bajtów-2 dzięki ngn.
Anonimowa funkcja ukrytej poprawki. Przyjmuje
n
jako lewy argument i listę dwóch macierzy jako prawy argument. Wymaga zerowego indeksowania (⎕IO←0
). Nawiasem mówiąc, ta funkcja działa na tablicach o dowolnej liczbie wymiarów.Wypróbuj online!
≡.{
…}
Identyczne wyniki następującej funkcji zastosowanej do każdej macierzy⍵
zn
as⍺
?≢⍵
rozmiar matrycy⍳
wskaźniki 0… rozmiar – 1⍺|
pozostała część podziału po podzieleniu przezn
⊂
dołącz do użycia we wszystkich wymiarach⍵⊂⍨
użyj tego, aby podzielić * macierz na macierz podmacierzy* rozpoczyna się nowy podział, gdy odpowiadający mu element jest mniejszy niż poprzedni; usuwa elementy oznaczone przez zero
,
wrzuć matrycę do listy podmacierzy∧
sortuj rosnącoźródło
(≢⍵)⍴⍺↑1
->0=⍺|⍳≢⍵
(z⎕io←0
)≡/{}¨
->≡.{}
Python 2 ,
108103 bajtówWypróbuj online!
źródło
Perl 6 ,
94 6863 bajtówWypróbuj online!
Anonimowy blok kodu, który przyjmuje dane wejściowe
size, [matrix1, matrix2]
i zwraca wartość logicznąTrue/False
. Może istnieć bardziej wydajny sposób dzielenia macierzy na kawałki niżrotor
.Wyjaśnienie:
źródło
05AB1E , 14 bajtów
Wypróbuj online!
źródło
Java (JDK) , 221 bajtów
Wypróbuj online!
Wyjaśnienie
Chodzi o to, aby wybrać każdą małą komórkę jako ciąg, który jest porównywalny, a następnie posortować te ciągi i porównać je w kolejności.
Kredyty
źródło
for(j=0;j<l;){c[z=i/n+j/n*x]+=a[i][j];d[z]+=b[i][j++];}
? .. Możesz usunąć wsporniki, wkładając wszystko do pętli. Równieżi=0
w pętli może być usunięty, ponieważ Twojai
jest już 0 w deklaracji.var d=new String[x*x];
może byćvar d=c.clone();
zamiast. 234 bajty[
i]
z{
a}
i dodać wiodącymnew int[][]
i to byłoby na tyle. ;)i=0
Był pozostałością kiedy wypełniony tablice przez siebie zamiast używaćArrays.fill
. Dzięki :-) A do tegoclone
myślałem o użyciu, ale nadal myślałem, że zwróciłoby to,Object
a nie rzeczywisty typ. Muszę się spóźnić o kilka wersji;)Japt , 18 bajtów
Wypróbuj online!
Wyjaśnienie:
Krok „Zamień na ciąg znaków” jest konieczny, ponieważ Japt nie porównuje tablic według wartości, a wbudowane narzędzie do obejścia nie działa dla tablic wielowymiarowych .
źródło
A.e()
pracować dla tablic wielowymiarowych; zawsze chciałem do tego wrócić. W międzyczasieÕmòV
->yòV
zaoszczędzi ci bajt.TSQL, 164 bajty
Wypełnianie zmiennej tabeli w celu uzyskania danych wejściowych, to tworzenie danych wejściowych i wstawianie danych nie zostało uwzględnione w liczbie bajtów. Tylko rzeczywiste zapytanie do wyodrębnienia danych.
Gra w golfa (bez stołu testowego - można go znaleźć w wersji bez golfa):
Nie golfowany:
Wypróbuj to
źródło
JavaScript (ES6), 88 bajtów
Wypróbuj online!
W jaki sposób?
Ten kod to:
Wykorzystuje limity opisane w wyzwaniu:
Macierz składa się z pojedynczych cyfr, dzięki czemu możemy po prostu połączyć wszystkie komórki podmacierzy bez żadnego separatora i nadal uzyskać unikatową jej reprezentację (np.
[[1,2],[3,4]]
Można ją zapisać jako"1234"
).lub jako kod JS:
y / n << 7 | x << n
Skomentował
źródło
Węgiel drzewny ,
5449 bajtówWypróbuj online! Link jest do pełnej wersji kodu. Pobiera dane wejściowe jako tablicę dwuwymiarowych tablic o równej wielkości. Wyjście 1 w przypadku sukcesu, nic w przypadku niepowodzenia. Wyjaśnienie:
Załóżmy sukces.
Pętla nad tablicami.
Podziel tablicę na
n
kawałki wierszy wielkości.Pętlę nad każdą porcją kolumny.
Wyodrębnij fragment kolumny dla każdego wiersza fragmentu wiersza i zapisz wynikową submatrix na liście.
Gdy lista nie jest pusta, usuń ostatni fragment listy, który w normalnych okolicznościach pochodzi z drugiej tablicy.
Policz liczbę wystąpień tego fragmentu w pierwszej połowie listy, która w normalnych okolicznościach zawiera pozostałe fragmenty z pierwszej tablicy.
Jeśli niezerowe, usuń pierwsze wystąpienie tego fragmentu z listy.
Jeśli zero, usuń wynik, co spowoduje fałsz.
źródło
J , 55 bajtów
Wypróbuj online!
Straszne rozwiązanie, po prostu sprawiło, że zadziałało - nie mam siły, aby go zagrać w golfa ...
źródło
Haskell,
7473 bajtyUwaga: TIO nie zostało zainstalowane
Data.Lists
, więcData.List
zamiast tego używam dodać brakującą funkcjęchunksOf
: Wypróbuj online!źródło
C # (interaktywny kompilator Visual C #) , 186 bajtów
Wypróbuj online!
-1 dzięki @KevinCruijssen!
Kod mniej golfowy:
źródło
j++
można usunąć i umieścić w+=c[i][j++]+" ";
celu zaoszczędzenia bajtu.PHP ,
186163162 bajtyWypróbuj online!
Jak wszystkie dobre wyzwania, zacząłem myśleć, że było to dość łatwe i rzuciło mi pewne zakręty. Ładnie wykonane @Kevin Cruijssen!
Części macierzy dzielą na ciągi zawierające wartości dla każdego bloku. Tablice są następnie sortowane i porównywane pod kątem równości.
Nie golfowany:
Wydajność
źródło
Czerwony ,
148147142 bajtówWypróbuj online!
źródło