To jest dwuwymiarowa wersja tego pytania .
Biorąc pod uwagę niepustą 2-wymiarową tablicę / macierz zawierającą tylko nieujemne liczby całkowite:
Wyprowadza tablicę z usuniętymi otaczającymi zerami, tj. Największą ciągłą podtablicę bez otaczających zer:
Przykłady:
Input:
[[0, 0, 0, 0, 0], [0, 0, 0, 1, 0], [0, 0, 0, 0, 1], [0, 0, 1, 1, 1], [0, 0, 0, 0, 0]]
Output:
[[0, 1, 0], [0, 0, 1], [1, 1, 1]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 3], [0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]]
Output:
[[0, 0, 3], [0, 0, 0], [5, 0, 0]]
Input:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Output:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Input:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Output:
[]
Input:
[[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
Output:
[[1, 1, 1, 1]]
Input:
[[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]]
Output:
[[1], [1], [1]]
Input:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
Output:
[[1, 1, 1, 1], [1, 2, 3, 1], [1, 1, 1, 1]]
code-golf
array-manipulation
alephalpha
źródło
źródło
:)
Po prostu trudno to streścić.[[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]]
(wynik ma szerokość / wysokość1
)Odpowiedzi:
MATL , 3 bajty
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
(implicit)
.Wolfram Language (Mathematica) , 42 bajty
Wypróbuj online!
Automaty komórkowe są rzeczywiście odpowiedzią na życie , wszechświat i wszystko . 1
W jaki sposób?
CellularAutomaton
akceptuje tablicę wejściową i opcjonalną wartość tła.{#,0}
Określa zatem, że do danych wejściowych należy zastosować regułę automatu komórkowego, przyjmując tło0
s.Przyjemne jest to, że
CellularAutomaton
przycina dane wyjściowe, tak że nie ma granicy komórek tła (ponieważ w przeciwnym razie dane wyjściowe leżą na nieskończonej płaszczyźnie).Kod stosuje zasadę
{Null, {}, {0, 0}}
- nakładanie głowyNull
na sąsiada 0-promienia każdej komórki (tj. Tylko środek: sama komórka) - dokładnie0
razy. Wynikiem tego jest oryginalne wejście, ale z usuniętym tłem (tj. Wykadrowanie otaczających0
s).1. Zobacz bajt mojej odpowiedzi? ;)
źródło
JavaScript (ES6), 98 bajtów
Wypróbuj online!
W jaki sposób?
Aby przezwyciężyć brak wbudowanego zip , definiujemy funkcję g (), która może działać na wierszach lub kolumnach macierzy wejściowej a [] , w zależności od wartości flagi globalnej z .
g () szuka indeksu minimalna m i wskaźnik maksymalnej M z albo bez pustych rzędów (jeśli z jest nieokreślony) lub nie są puste kolumny (jeśli z jest określona) i zwraca odpowiedni plaster samego albo w osnowie albo w danym rzędzie matrycy.
Podsumowując:
.map(z=g)
Skomentował
źródło
Haskell ,
6261 bajtówWypróbuj online!
foldr(zipWith(:))e
ze=[]:e
jest nieco krótszytranspose
isnd.span(all(<1))
usuwa wiodące listy zer z listy. Jaktranspose
następujereverse
na liście 2D równa się obrotowi o 90 °, kodf.f.f.f
jest tylko cztery razy upuszczając wiodące listy zer i obraca się .źródło
Pyth , 13 bajtów
Wypróbuj online!
źródło
=_CQ
że działałoby zamiast=Q_CQ
.Galaretka , 10 bajtów
Wypróbuj online!
źródło
Brachylog ,
24222019 bajtówWypróbuj online!
Zwraca macierz wyników jako tablicę tablic lub fałsz dla pustych danych wyjściowych.
(Dzięki @Fatalize za sugerowanie wbudowanego predykatu i oszczędność 1 bajtu.)
Wyjaśnienie
Predykat 0 (główny):
Predykat 1:
źródło
{s.h+>0∧.t+>0∧}\↰₁\
. (dotyczy to praktycznie każdej odpowiedzi Brachylog, predykaty dotyczące nowych linii są tak naprawdę realizowane tylko wtedy, gdy chcesz pisać bardziej czytelne rzeczy).R ,
96 10097 bajtówWypróbuj online!
~
Pomocnik trwa nieujemną wektor i zwraca wektor zFALSE
na „zewnętrzny”0
s wektora iTRUE
na pozytywy i wszelkich „wnętrza”0
s. Ta funkcja jest stosowana do sum wierszy i kolumn macierzy wejściowej.~
i!
zastosuj traktowanie parsera R. operatorów.Poprawiono zgodnie z komentarzem @ DigEmAll, ale niektóre bajty odtworzono z powrotem z @ J.Doe
źródło
drop=F
tak jak ja, w przeciwnym razie te 2 testy zwrócą wektor zamiast wiersza i kolumny: Wypróbuj online!drop=F
. Nadal poniżej tony!R ,
8979 bajtówWypróbuj online!
Dzięki @ngm za kod przypadków testowych i @ J.Doe za zapisanie 10 bajtów!
drop=F
parametr ze względu na domyślne zachowanie R przekształcające macierz pojedynczego wiersza / kolumny w wektory ...źródło
range
i ulepszaniu indeksacjiAPL (Dyalog Classic) ,
1715 bajtówWypróbuj online!
źródło
Python 2 , 71 bajtów
Zwraca przez modyfikację wejścia. Lista powinna zostać przekazana jako dane wejściowe.
Wypróbuj online!
Python 2 , 77 bajtów
To również modyfikuje dane wejściowe, ale działa ....
Wypróbuj online!
źródło
Wolfram Language (Mathematica) , 66 bajtów
Wypróbuj online!
Teraz działa wypełniając tablicę zerami (dzięki @JungHwanMin)!
Drugie podziękowania dla @JungHwanMin za oszczędność 4 bajtów
źródło
Galaretka , 12 bajtów
Wypróbuj online!
Jako funkcja.
źródło
Wolfram Language (Mathematica) , 48 bajtów
Wypróbuj online!
Robi to normalnie.
źródło
\[Transpose]
nie może tu działać.Łuska , 11 bajtów
Wypróbuj online!
Wydaje mi się, że niektóre bajty mogłyby zostać wygolone przez skrócenie
!5¡
części.Jak to działa
Zamapuj bieżącą wersję danych wejściowych i: odwróć każdą z nich, po upuszczeniu najdłuższego prefiksu składającego się wyłącznie z zer (upuszczenie tego prefiksu odbywa się za pomocą Husky
↓
, która jest funkcją, która przycina najdłuższy ciąg kolejnych elementów od początku lista, która daje prawdziwe wyniki po przejściu przez funkcję, a mianowicie¬
logiczna nie).Transponuj, zastępując brakujące wpisy wartością 0 .
źródło
Siatkówka , 87 bajtów
Wypróbuj online! Wyjaśnienie:
Dopóki co najmniej jeden wiersz nie zaczyna się od zera ...
... usuń wiodące zero z każdego wiersza.
Dopóki co najmniej jeden wiersz nie kończy się na zero ...
... usuń końcowe zero z każdego wiersza.
Usuń wiodące wiersze zer.
Usuń końcowe rzędy zer lub ostatnie pozostałe zero.
źródło
Węgiel drzewny , 48 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Zawiera 15 bajtów do formatowania. Wyjaśnienie:
Powtórz 4 razy.
Powtarzaj, gdy tablica nie jest pusta, ale jej ostatni wiersz sumuje się do zera ...
Usuń ostatni wiersz z tablicy i wypisz wiersz o długości jego sumy, tzn. Nic.
Jeśli tablica nie jest pusta, transponuj ją.
Ładnie sformatuj tablicę do wyświetlenia. (
Iθ
Zamiast tego byłoby wyjście standardowe .)źródło
JavaScript,
144140129127 bajtów140 -> 129 bajtów, dzięki @Arnauld
Algorytm
źródło
some/some
zamiastfindIndex/find
i przestawiając deklaracje funkcji pomocnika, aby pozbyć się nawiasu wokół (obecnie pojedynczego) argumentu funkcji głównej.[[]]
aby zagwarantować, że t będzie w stanie działaćw[0]
.Python 2 ,
118116 bajtówWypróbuj online!
Zapisano:
źródło
s=sum
w definicji lambdaPHP (> = 5,4),
200194186184 bajtów(-6 bajtów, zwracając
null
zamiast pustej tablicy)(-8 bajtów dzięki Tytusowi )
(-2 bajty z wywołaniem przez odniesienie dzięki Tytusowi )
Wypróbuj online!
W jaki sposób?
Znajduje indeks minimalny i maksymalny dla wierszy (
$m
&$M
) i kolumn ($n
&$N
) i zastępuje dane wejściowe tablicą podrzędną od$m,$n
do$M,$N
(jest to wywołanie przez odniesienie).źródło
if($C){$m>$r&&$m=$r;$M>$r||$M=$r;$n>$c&&$n=$c;$N>$c||$N=$c;}
while($m<=$M)$o[]=array_slice($a[$m++],$n,$N-$n+1);
&&
i||
I jestem pewien, że będę mógł wykorzystać tę sztuczkę w innych miejscach.$a=
zamiastreturn
.Oktawa,
4849 bajtówWypróbuj online!
Znajdź niezerowe punkty i uporządkuj je w nowej rzadkiej macierzy.
źródło
K (ngn / k) , 22 bajty
Wypróbuj online!
źródło
J , 24 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Ruby ,
7363 bajtyWypróbuj online!
Edycja: uproszczona, także poprzednia wersja uległa awarii dla wszystkich
0
sJak to działa:
0
sźródło
&.sum<0
zamiast&.sum<1
.Oktawa ,
7874 bajtówWypróbuj online!
Wyjaśnienie
Spowoduje to obrócenie macierzy o
90
stopnie (x=rot90(x)
) wystarczającą liczbę razy (for k=1:... end
). Liczba obrotów jest wielokrotnością4
, więc końcowa matryca ma pierwotną orientację. W szczególności liczba obrotów jest4
pomnożona przez liczbę zer w macierzy (nnz(~x)*4
).W przypadku każdego obrotu, jeśli po lewej stronie znajduje się jedna lub więcej kolumn zawierających tylko zera, są one usuwane (
x=x(:,~~cumsum(any(x,1)))
).Pozostała część macierzy po tym procesie jest wyprowadzana przez funkcję (
function x=f(x)
).źródło
Stax , 14 bajtów
Uruchom i debuguj
Alternatywnie, również 14 bajtów
Uruchom i debuguj
źródło
PHP, 188 bajtów
zadzwoń przez odniesienie.
awaria
źródło
Czysty , 73 bajty
Wypróbuj online!
Bardzo podobny do odpowiedzi Laikoniego Haskell .
źródło
Python 2 , 86 bajtów
Wypróbuj online!
Pobiera listę list, zwraca listę krotek.
Wyjaśnienie
Nadużywa cholernego zrozumienia listy. To jest równoważny rozwinięty kod:
źródło
Japt
-h
,2311 bajtówSpróbuj
Wyjaśnienie
źródło