Cắt nền mà mất tập trung!


13

Bạn có thấy khó chịu khi chụp ảnh không, nhưng hậu cảnh làm mất đi chất thực tế của ảnh? Tôi muốn nói là như vậy. Tôi cần biết tôi nên cắt bao nhiêu để thoát khỏi vấn đề này! Nhưng - như thường lệ - tôi khá lười biếng, vì vậy tôi cần ai đó làm điều này cho tôi ...

Nhiệm vụ & nội quy

Cho một ma trận nhị phân đại diện cho hình ảnh, xuất ra kích thước (chiều rộng và chiều cao) của ma trận con nhỏ nhất chứa tất cả 1 s trong ma trận gốc. Một tiểu ma trận là một khối các mục liền kề từ ma trận ban đầu. Tương tự, nó là một ma trận mới được hình thành bằng cách chồng lên một tập hợp con của các hàng liền kề và một tập hợp con của các cột liền kề của bản gốc.

  • Nó cũng được phép lấy chiều rộng và chiều cao của ma trận làm đầu vào.
  • Đầu vào được đảm bảo chứa ít nhất 1 .
  • Bạn có thể lấy đầu vào và cung cấp đầu ra thông qua bất kỳ phương thức tiêu chuẩn nào , trong khi lưu ý rằng các lỗ hổng này bị cấm theo mặc định. Đây là , vì vậy hãy cố gắng hoàn thành nhiệm vụ theo ít byte nhất bạn có thể quản lý bằng ngôn ngữ bạn chọn.

Thí dụ

[000000010100011011001010000000][101001101101010](5,3)

Các trường hợp thử nghiệm

Đầu vào | Đầu ra

[[0,1,0,0,0,1,0]]
-> (5,1) hoặc (1,5)

[[0,0,0,0,0], [0,1,0,1,0], [0,0,1,0,0]]
-> (3,2) hoặc (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]]
-> (5,1) hoặc (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) hoặc (3,5)

1
Điều này cảm thấy rất quen thuộc; Có phải trong Sandbox một thời gian?
Xù xì

8
Điều này thực sự rất gần với câu hỏi được liên kết nhưng tôi nghĩ nó có thể được coi là một tập hợp con đủ xa vì việc tạo ma trận không thực sự cần thiết để tính chiều rộng và chiều cao thực tế. Chẳng hạn, một thuật toán có thể sẽ là đếm số lượng không biên tối thiểu cho mỗi hàng và cột và trừ đi các số liệu từ các kích thước ban đầu.
Ông Xcoder

Câu trả lời:



5

APL (Dyalog Unicode) , 10 byte SBCS

Chức năng tiền tố ẩn danh.

(1+⌈/-⌊/)⍸

Hãy thử trực tuyến!

 chỉ số 1s.

(... ) áp dụng các chức năng ngầm sau đó:

⌊/ tối thiểu ( tọa độ y thấp nhất và tọa độ x thấp nhất )

⌈/- điểm trừ tối đa (điều này cho chúng ta phạm vi)

1+ một cộng với đó (bao gồm)


5

Octave , 57 56 45 byte

Ở đây findkhông nâng nặng: Nófinds là các chỉ số hàng và cột của các mục khác. Sau đó, chúng ta chỉ cần tìm sự khác biệt giữa tối đa và tối thiểu (cộng một) cho mỗi người một cách riêng biệt.

Cảm ơn @beaker và @AndrasDeak cho -1 byte và @LuisMendo cho -11 byte!

@(a){[I{1:2}]=find(a),cellfun(@range,I)}{2}+1

Hãy thử trực tuyến!



3

Thạch , 7 byte

S,§t€0Ẉ

Hãy thử trực tuyến!

Làm thế nào nó hoạt động

S,§t€0Ẉ  Main link. Argument: M (matrix)

S        Take the columnwise sum. Let's call the resulting array A.
  §      Take the sum of each row. Let's call the resulting array B.
 ,       Pair; yield [A, B].
   t€0   Trim surrounding zeroes of A and B.
      Ẉ  Widths; yields the lengths of the trimmed arrays.

3

Con trăn 2 ,  63  55 byte

-8 với sự trợ giúp từ Vincent (lấy ma trận đầu vào là một mảng Numpy)

lambda a:[len(`a.max(x)`[7::3].strip('0'))for x in 0,1]

Một hàm không tên chấp nhận một mảng số nguyên Numpy 2 in (d {0,1}) trả về một danh sách các số nguyên , [width,height].

Hãy thử trực tuyến!


Phiên bản không phải Numpy ở 63 byte (chấp nhận danh sách các số nguyên trong {0,1}):

lambda a:[len(`map(max,v)`[1::3].strip('0'))for v in zip(*a),a]

Hãy thử trực tuyến!

Làm sao?

Cho một ma trận, a, formỗi ( v) của chuyển vị, zip(*a)a bản thân chúng ta thấy chiều cao cần thiết (cho các transpose này là chiều rộng).

Ánh xạ maxtrên khắp vmang lại một danh sách các số 0 và số 0, đại diện nếu mỗi hàng vchứa bất kỳ số nào. Biểu diễn chuỗi của danh sách này được tìm thấy bằng backticks ( `...`), điều này đưa ra một chuỗi có một đầu [, sau đó là các số 0 và các số được phân định bởi , (dấu phẩy + dấu cách). Chúng tôi cắt chuỗi này bắt đầu từ chỉ mục một trong ba bước bằng cách sử dụng [1::3]cho chúng tôi một chuỗi chỉ các số 0 và số một, cho phép chúng tôi sử dụng hàm chuỗi stripđể loại bỏ các số không bên ngoài ( strip('0')).

Ví dụ:

      a = [[0,0,0,0,0]           map(max,a)                    = [0,1,1]
          ,[0,1,0,0,0]          `map(max,a)`[1::3]             = '011'
          ,[0,0,0,1,0]]         `map(max,a)`[1::3].strip('0')  = '11'
                            len(`map(max,a)`[1::3].strip('0')) = 2

zip(*a) = [(0,0,0)         map(max,zip(*a))                    = [0,1,0,1,0]
          ,(0,1,0)        `map(max,zip(*a))`[1::3]             = '01010'
          ,(0,0,0)        `map(max,zip(*a))`[1::3].strip('0')  = '101'
          ,(0,0,1)    len(`map(max,zip(*a))`[1::3].strip('0')) = 3
          ,(0,0,0)]

    --> [len(`map(max,v)`[1::3].strip('0'))for v in zip(*a),a] = [3,2]

57 byte bằng cách sử dụng một mảng numpy.
Vincent

Nếu chúng ta lấy đầu vào là loại không tích hợp, chúng ta có nên đếm một số loại báo cáo nhập khẩu để cho phép chúng ta làm như vậy không? (Có thể là chúng ta phải đặt tiêu đề cho bài đăng là "Python 2 với numpy" - Tôi không hoàn toàn chắc chắn) ... nếu bạn có thời gian, bạn có thể hỏi trong phòng trò chuyện byte thứ mười chín không?
Jonathan Allan

1
... Cũng 55 byte phải không?
Jonathan Allan

1
Tôi thực sự không thể tìm thấy câu trả lời rõ ràng trên PPCG Meta , vì vậy tôi không chắc về điều này. Và đúng vậy, 55 byte thực sự :)
Vincent

1
Tôi chỉ hỏi thôi. Theo bài đăng này , nhập khẩu không phải được bao gồm.
Vincent

1

Võng mạc 0.8.2 , 83 byte

+`^0+¶|¶0+$

+1`((.)*).(¶(?<-2>.)*).(?<=(1)¶.*|(.))
$1$3$4$5
(¶?)*0*(.*1)0*
$#1 $.2

Hãy thử trực tuyến! Giải trình:

+`^0+¶|¶0+$

Xóa hàng không hàng đầu và dấu.

+1`((.)*).(¶(?<-2>.)*).(?<=(1)¶.*|(.))
$1$3$4$5

Xóa tất cả 0s trên các dòng trên cuối cùng. Xóa tất cả 1hai, nhưng thay đổi chữ số bên dưới dòng tiếp theo thành một 1trong trường hợp đó. Điều này bitwise hoặc là các hàng với nhau.

(¶?)*0*(.*1)0*
$#1 $.2

Đếm số lượng hàng là số dòng mới cộng với 1 và số cột là số chữ số giữa số 1 và số cuối cùng.


1

J , 31 byte

[:$([:|.@|:}.^:(0=1#.{.))^:4^:_

Hãy thử trực tuyến!

Giải trình:

                            ^:_ - repeat until the result stops changing
   (                    )^:4    - repeat 4 times
             ^:(        )       - is
                  1#.           - the sum of
                      {.        - the first row
                 =              - equal 
                0               - to 0
           }.                   - if yes, drop the first row
    [:|.@|:                     - transpose and reverse (rotate 90 degrees) 
[:$                             - what's the shape of the result?


1

Toán học, 34 byte

Max@#-Min@#+1&/@(#~Position~1)&

Chức năng thuần túy. Lấy danh sách các số nguyên lồng nhau làm đầu vào và trả về danh sách hai số nguyên (chiều cao theo chiều rộng) làm đầu ra. Ký tự Unicode là U + F3C7 cho \[Transpose].



1

05AB1E , 11 9 byte

ζ‚Oε0Û0Üg

-2 byte nhờ @ Mr.Xcoder .

Dùng thử trực tuyến hoặc xác minh tất cả các trường hợp thử nghiệm .

Giải trình:

ζ            # Swap the rows and columns of the (implicit) input-list
            # Pair it with the (implicit) input-list
  O          # Take the sum of each column and row
   ε         # Map Both the list of column-sums and list of row-sums to:
    0Û       #  Remove all leading zeros
      0Ü     #  Remove all trailing zeros
        g    #  Take the length of the remaining lists

1
ζ‚Oε0Û0Ügtiết kiệm 2 byte.
Ông Xcoder

@ Mr.Xcoder À, tất nhiên rồi. Tôi đã không quá vui về sự hoán đổi đó. Không thể tin rằng tôi đã không nghĩ đến việc thực hiện cặp đầu tiên và hơn cả số tiền ..>.>
Kevin Cruijssen




Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.