Wprowadzenie
Na potrzeby tego wyzwania zdefiniujemy sąsiadów elementu w macierzy kwadratowej (takiej, że ) jako wszystkie wpisy które sąsiadują bezpośrednio z po przekątnej, w poziomie lub w pionie (tzn. „otaczają” , bez owijania się).A E = A i , j A E
W przypadku pedantów formalną definicją sąsiadów dla macierzy jest (indeksowany 0): gdzie n×nA N i ,E i ,
Powiedzmy, że element o indeksie żyje we wrogości, jeśli jest chroniony prawem autorskim do wszystkich swoich sąsiadów (to znaczy ). Niestety, ten biedny wpis nie może pożyczyć nawet kubka cukru od swoich niegrzecznych pobliskich mieszkańców ...
Zadanie
Dość historii: Biorąc pod uwagę macierz kwadratową dodatnich liczb całkowitych, wypisz jedną z następujących opcji:
- Płaska lista elementów (deduplikowana lub nie) wskazująca wszystkie wpisy, które zajmują niektóre indeksy w tak że sąsiedzi są wrogo nastawieni.
- Macierz boolowska z s na pozycjach, w których sąsiedzi są wrogo nastawieni, a przeciwnym razie (możesz wybrać dowolne inne spójne wartości zamiast i ).
- Lista par indeksów które reprezentują wrogie dzielnice.
Implementacja referencji w Physica - obsługuje również składnię Pythona dla I / O. Możesz pobierać dane wejściowe i generować dane wyjściowe dowolną standardową metodą w dowolnym rozsądnym formacie, zwracając uwagę, że te luki są domyślnie zabronione. To jest golf golfowy, więc wygrywa najkrótszy kod w bajtach (w każdym języku)!
Co więcej, możesz również wziąć rozmiar matrycy jako dane wejściowe i dodatkowo możesz wziąć matrycę jako płaską listę, ponieważ zawsze będzie kwadratowa.
Przykład
Rozważ następującą macierz:
Odpowiednimi sąsiadami każdego elementu są:
i j – E -> Neighbours | All coprime to E?
|
0 0 – 64 -> {10; 27; 22} | False
0 1 – 10 -> {64; 14; 27; 22; 32} | False
0 2 – 14 -> {10; 22; 32} | False
1 0 – 27 -> {64; 10; 22; 53; 58} | True
1 1 – 22 -> {64; 10; 14; 27; 32; 53; 58; 36} | False
1 2 – 32 -> {10; 14; 22; 58; 36} | False
2 0 – 53 -> {27; 22; 58} | True
2 1 – 58 -> {27; 22; 32; 53; 36} | False
2 2 – 36 -> {22; 32; 58} | False
Dlatego wynik musi być jednym z następujących:
{27; 53}
{{0; 0; 0}; {1; 0; 0}; {1; 0; 0}}
{(1; 0); (2; 0)}
Przypadki testowe
Input –> Version 1 | Version 2 | Version 3
[[36, 94], [24, 69]] ->
[]
[[0, 0], [0, 0]]
[]
[[38, 77, 11], [17, 51, 32], [66, 78, 19]] –>
[38, 19]
[[1, 0, 0], [0, 0, 0], [0, 0, 1]]
[(0, 0), (2, 2)]
[[64, 10, 14], [27, 22, 32], [53, 58, 36]] ->
[27, 53]
[[0, 0, 0], [1, 0, 0], [1, 0, 0]]
[(1, 0), (2, 0)]
[[9, 9, 9], [9, 3, 9], [9, 9, 9]] ->
[]
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
[]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]] ->
[1, 1, 1, 1, 1, 1, 1, 1, 1] or [1]
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
[[35, 85, 30, 71], [10, 54, 55, 73], [80, 78, 47, 2], [33, 68, 62, 29]] ->
[71, 73, 47, 29]
[[0, 0, 0, 1], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]
[(0, 3), (1, 3), (2, 2), (3, 3)]
źródło
Odpowiedzi:
APL (Dyalog) , 17 bajtów
Wypróbuj online! (podziękowania dla ngn za tłumaczenie przypadków testowych na APL)
Krótkie wyjaśnienie
(×/∘,↓)⌺3 3
otrzymuje iloczyn każdego elementu z jego sąsiadami.Następnie dzielę przez argument
÷⊢
, aby każdy wpis w macierzy został odwzorowany na iloczyn jego sąsiadów.Na koniec biorę gcd argumentu za pomocą tej macierzy
⊢∨
i sprawdzam równość z 1,1=
Uwaga, podobnie jak w przypadku odpowiedzi ngn , nie udaje się to w przypadku niektórych danych wejściowych z powodu błędu interpretera.
źródło
JavaScript (ES6), 121 bajtów
Zwraca macierz wartości boolowskich, gdzie false oznacza wrogi.
Wypróbuj online!
W jaki sposób?
Metoda zastosowana do izolacji 8 sąsiadów każdej komórki jest podobna do tej, którą tu opisałem .
Skomentował
źródło
MATL , 22 bajty
Dane wejściowe to macierz. Dane wyjściowe to wszystkie liczby z wrogimi sąsiadami.
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie z działającym przykładem
Rozważ dane wejściowe
[38, 77, 11; 17, 51, 32; 66, 78, 19]
jako przykład. Zawartość stosu pokazana jest od dołu do góry.źródło
APL (Dyalog Classic) ,
2322 bajtów-1 bajt dzięki @ H.PWiz
Wypróbuj online!
nie obsługuje matryc mniejszych niż 3x3 z powodu błędu interpretera
źródło
(⊃∨⊢)
->∨∘⊂⍨
tak myślęGalaretka , 24 bajty
Hmm, wydaje się długi.
Monadyczny link akceptujący listę list dodatnich liczb całkowitych, która zwraca listę każdej z wartości znajdujących się w wrogich dzielnicach (wersja 1 bez usuwania duplikatów).
Wypróbuj online! Lub zobacz zestaw testowy .
W jaki sposób?
źródło
Python 2 ,
182177166 bajtówWypróbuj online!
Wyświetla listę list z wpisami True / False.
źródło
Haskell , 95 bajtów
Wypróbuj online!
Funkcja
?
przyjmuje macierzm
jako listę list i rozmiar macierzyn
; zwraca listę wpisów z wrogości .źródło