Nói cho tôi biết, có bao nhiêu hình vuông?


12

Cho một mảng 2D không trống bao gồm 01, tìm số lượng hình vuông có 4 góc là tất cả 1. Các hình vuông không cần phải "thẳng đứng". Tất cả các hàng được đảm bảo có cùng chiều dài.

Phương pháp đầu vào / đầu ra hợp lý được cho phép.

Testcase:

0001000
1000000
0000000
0000100
0100000

Điều này trở lại 1.

10101
00000
10100
00000
10001

Điều này trở lại 2.

1111
1111
1111
1111

Điều này trở lại 20.

Đây là . Câu trả lời ngắn nhất trong byte thắng. Tiêu chuẩn áp dụng.


Một cách giải thích khác, nếu tôi hiểu ý định: 4 1giây trên một hình vuông, sao cho mỗi điểm 1tương đương dọc theo chu vi từ hai hàng xóm của nó.
frageum

@feersum Điều kiện sau đúng với mọi ô vuông, phải không?
Wojowu

Câu trả lời:


18

JavaScript (ES6), 127 124 119 byte

Đã lưu 3 byte nhờ nderscore

m=>(F=(x,y)=>m.map((r,Y)=>r.map((i,X)=>i?1/y?n+=x<X&y<=Y&(g=(a,b)=>(m[b+X-x]||0)[a-Y+y])(x,y)&g(X,Y):F(X,Y):0)))(n=0)|n

Làm sao?

Hàm này lặp lại trên tất cả các cặp ô (x, y) , (X, Y) của ma trận đầu vào m sao cho:

  • m [x, y] = m [X, Y] = 1
  • x <X
  • y ≤ Y

Mỗi cặp khớp mô tả tọa độ của cạnh tiềm năng của hình vuông. Các bất đẳng thức đảm bảo rằng mỗi cạnh chỉ được kiểm tra một lần.

Chúng tôi sử dụng vectơ [dx, dy] = [X - x, Y - y] xoay 90 ° theo chiều kim đồng hồ để kiểm tra các ô nằm ở [x - dy, y + dx][X - dy, Y + dx] . Nếu cả hai đều chứa 1 , chúng tôi đã tìm thấy một hình vuông hợp lệ.

Quảng trường

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


-2 byte: g=(a,b)=>(m[b+X-x]||0)[a-Y+y]-1 byte: sử dụng |nthay vì&&n
nderscore

6

MATL , 20 byte

&fJ*+4XN!"@&-|un3=vs

Đầu vào là một ma trận.

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

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

Điều này tìm thấy tất cả các tọa độ của các mục nhập khác trong lưới đầu vào và biểu thị chúng dưới dạng các số phức, sao cho các chỉ số hàng và cột tương ứng với các phần thực và phần ảo tương ứng.

Đoạn mã sau đó tạo ra một mảng gồm tất cả các kết hợp (thứ tự không quan trọng) của các số này được lấy 4 lần. Mỗi sự kết hợp đại diện cho một hình vuông ứng cử viên. Đối với mỗi kết hợp, ma trận 4 × 4 của sự khác biệt tuyệt đối theo cặp (tức là khoảng cách trong mặt phẳng phức) được tính toán. Đây là một ma trận đối xứng với các số 0 dọc theo đường chéo chính của nó. Kết hợp hiện tại tạo thành một hình vuông khi và chỉ khi ma trận chứa chính xác 3 giá trị riêng biệt (chúng sẽ là cạnh vuông, đường chéo vuông và 0):

nhập mô tả hình ảnh ở đây

Mặt khác, ví dụ, một hình chữ nhật không vuông sẽ tạo ra 4 giá trị riêng biệt (hai cạnh, một giá trị đường chéo và 0);

nhập mô tả hình ảnh ở đây

và một tứ giác chung có thể có tối đa 7 giá trị (bốn cạnh, hai đường chéo và 0):

nhập mô tả hình ảnh ở đây

&f      % Input (implicit). Push vectors of row and column indices of nonzero entries
J*      % Multiply by imaginary unit
+       % Add the two vectors. Gives a vector of complex coordinates
4XN     % Matrix of combinations of these complex numbers, taken 4 at a time. Each
        % row is a combination
!       % Transpose
"       % For each column
  @     %   Push current column: candidate set of four points
  &-    %   All pair-wise differences
  |     %   Absolute value
  u     %   Unique entries
  n3=   %   Does the number of elements equal 3? Gives true (1) or false (0)
  vs    %   Concatenate vertically with previous accumulated result, and sum
        % End (implicit). Display (implicit)

Làm thế nào nó hoạt động?
Nữ tu bị rò rỉ

@LeakyNun Giải thích thêm
Luis Mendo
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.