Czy to nie denerwujące, gdy robisz zdjęcie, ale tło szkodzi rzeczywistej treści obrazu? Powiedziałbym, że tak. Muszę wiedzieć, ile powinienem przyciąć, aby pozbyć się tego problemu! Ale - jak zwykle - jestem dość leniwy, więc potrzebuję kogoś, kto by to dla mnie zrobił ...
Zadanie i zasady
Biorąc pod uwagę macierz binarną reprezentującą obraz, wyprowadzaj wymiary (szerokość i wysokość) najmniejszej podmacierzy, która zawiera wszystkie s oryginalnej matrycy. Pod-macierzą jest blok sąsiadujących pozycji z oryginalnej macierzy. Odpowiednio jest to nowa matryca utworzona przez nakładanie się podzbioru sąsiednich rzędów i podzbioru sąsiednich kolumn oryginału.
- Dozwolone jest również przyjmowanie szerokości i wysokości matrycy jako danych wejściowych.
- Gwarantowane wejście zawiera co najmniej jeden .
- Możesz przyjmować dane wejściowe i dostarczać dane wyjściowe dowolną standardową metodą , zwracając uwagę, że te luki są domyślnie zabronione. To jest golf golfowy , więc spróbuj wykonać zadanie w jak najmniejszej liczbie bajtów, którymi możesz zarządzać w wybranym języku .
Przykład
Przypadki testowe
Wejście | Wynik [[0,1,0,0,0,1,0]] -> (5,1) lub (1,5) [[0,0,0,0,0], [0,1,0,1,0], [0,0,1,0,0]] -> (3,2) lub (2,3) [[1,1,1,1], [0,0,0,0], [0,0,0,0], [1,0,0,0]] -> (4,4) [[0,0,0,0,0,0]], [0,1,0,1,0,1], [0,0,0,0,0,0,0]] -> (5,1) lub (1,5) [[0,0,0,0,0]] [0,1,0,1,0], [0,0,1,0,0], [0,1,0,1,0], [ 0,0,0,0,0]] -> (3,3) [[0,0,0,0,0,0]], [0,1,0,1,0,0], [0,1,1,0,1,1], [0,0,1 0,1,0], [0,0,0,0,0,0]] -> (5,3) lub (3,5)
code-golf
array-manipulation
matrix
binary-matrix
Pan Xcoder
źródło
źródło
Odpowiedzi:
MATL , 5 bajtów
Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
APL (Dyalog Unicode) , 10 bajtów SBCS
Anonimowa ukryta funkcja prefiksu.
Wypróbuj online!
⍸
wskaźniki 1s.(
…)
Zastosuj do tego następującą milczącą funkcję:⌊/
minimum (najniższa współrzędna y i najniższa współrzędna x )⌈/-
maksimum minus to (daje nam to zasięg)1+
jeden plus, że (do włączenia)źródło
Oktawa ,
57 5645 bajtówTutaj
find
wykonuje się ciężkie podnoszenie: tofinds
indeksy rzędów i kolumn niezerowych wpisów. Następnie musimy tylko znaleźć różnicę między maksimum a minimum (plus jeden) dla każdego z nich osobno.Dzięki @beaker i @AndrasDeak za -1 bajtów, a @LuisMendo za -11 bajtów!
Wypróbuj online!
źródło
Python 2 ,
9286 bajtówWypróbuj online!
źródło
Galaretka , 7 bajtów
Wypróbuj online!
Jak to działa
źródło
Python 2 ,
6355 bajtów-8 z pomocą Vincenta (weź macierz wejściową jako tablicę Numpy)
Anonimowa funkcja przyjmując 2-d NumPy tablicę liczb całkowitych (W
{0,1}
), która zwraca listę liczb całkowitych[width,height]
.Wypróbuj online!
Wersja inna niż Numpy w 63 bajtach (akceptacja listy list liczb całkowitych w
{0,1}
):Wypróbuj online!
W jaki sposób?
Biorąc pod uwagę macierz,
a
,for
each (v
) w transpozycjizip(*a)
, aa
sam znaleźć wymaganą wysokość (biorąc pod uwagę transpozycję to jest szerokość).Mapowanie w
max
poprzekv
daje listę zer i jedynek, reprezentujących, czy każdy wierszv
zawiera jedynki. Ciąg znaków reprezentujący tę listę można znaleźć za pomocą backticks (`...`
), co daje ciąg z wiodącym[
, a następnie zerami i zerami oddzielonymi,
(przecinek + spacja). Przecinamy ten ciąg, zaczynając od indeksu jeden w krokach trzy, używając[1::3]
do tego ciągu samych zer i jedynek, co pozwala nam użyć funkcji ciągstrip
do usunięcia zewnętrznych zer (strip('0')
).Na przykład:
źródło
Retina 0.8.2 , 83 bajty
Wypróbuj online! Wyjaśnienie:
Usuń początkowe i końcowe zero wierszy.
Usuń wszystkie
0
s z linii powyżej ostatniego. Usuń wszystkie1
dwa, ale1
w takim przypadku zmień cyfrę pod następnym wierszem na a . To bitowe lub wiersze razem.Policz liczbę wierszy jako liczbę znaków nowego wiersza plus 1, a liczbę kolumn jako liczbę cyfr między pierwszym a ostatnim 1.
źródło
J , 31 bajtów
Wypróbuj online!
Wyjaśnienie:
źródło
q / kdb +, 16 bajtów
źródło
Mathematica, 34 bajty
Czysta funkcja. Pobiera na wejściu zagnieżdżoną listę liczb całkowitych i zwraca na wyjściu listę dwóch liczb całkowitych (wysokość, a następnie szerokość). Znak Unicode to U + F3C7 dla
\[Transpose]
.źródło
R ,
4846 bajtówWypróbuj online!
-2 bajty zapisane przez Giuseppe.
źródło
05AB1E ,
119 bajtów-2 bajty dzięki @ Mr.Xcoder .
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
ζ‚Oε0Û0Üg
oszczędza 2 bajty.Galaretka , 9 bajtów
Wypróbuj online!
źródło
Haskell , 76 bajtów
Wypróbuj online!
źródło
Japt,
1615 bajtówWypróbuj lub uruchom wszystkie przypadki testowe
Wyjaśnienie
źródło
Rubinowy , 60 bajtów
Wypróbuj online!
źródło