Tìm số lượng hình chữ nhật trong một mảng byte 2D


12
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000001111111111111100000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000011111100000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000000000000000000000000000011111111111111100000000000000000
0000000000000111111000000000000000000011111111111111100000000000000000
0000000000000100001000000111111000000011111111111111100000000010000000
0000000000000100001000000111111000000000000000000000011000000000000000
0000000000000111111000000111111000000000000000000000011000000000000000
0000000000000000000000000000111111000000000000000000000000000000000000
0000000000000000000000000000111111000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000

Bạn được cung cấp một mảng 2 chiều kích thước mx n. Nó được đảm bảo rằng tất cả các byte là 1 hoặc 0. Tìm số lượng hình chữ nhật được biểu thị bằng 1 'khi xem trong 2d, như được hiển thị ở trên.

Chỉ có hình chữ nhật đầy đủ được xem xét để đếm.
Hình chữ nhật phải được bao quanh bởi 0 trừ khi chúng nằm trên cạnh (hình chữ nhật chạm theo đường chéo của 1 được mặc dù (xem ví dụ.)).

Ví dụ, trong mảng trên có 5 hình chữ nhật hợp lệ.

Bạn có thể sử dụng bất kỳ ngôn ngữ.


1
Tôi nghĩ một cách tốt hơn để diễn đạt là nói rằng: hình chữ nhật phải được bao quanh bởi 0, hoặc một cạnh
Cruncher

Làm xong. Cảm ơn vì đã diễn đạt nó bằng tiếng Anh tốt hơn.
microbian

Thế còn 1100\n1100\n0011\n0011?
Cruncher

1
Tôi nghĩ đó là lý do tại sao tôi viết 'liền kề / chồng chéo'. Đây là 2 hình chữ nhật hợp lệ từ ý định ban đầu của tôi. Nhưng điều kiện 'xung quanh' đang hạn chế chúng bây giờ. Bạn có cách nào tốt hơn để giải thích không
microbian

1
Ngay cả ở liền kề, nó mơ hồ cho dù đường chéo có nghĩa là liền kề hay không. Sự mơ hồ tương tự cho dù có hay không bao quanh phương tiện, được bao quanh ở các góc, hoặc chỉ hai bên
Cruncher

Câu trả lời:


2

GolfScript, 107 ký tự

.n?):L;'1'/{,}%{1$+)}*;][]\{:A{{+}+[1L.~)-1]%&}+1$\,.@^\[[[A]]+{|}*]+}/{.{L%}{%$..&1$,1$,/*$=}:C~\{L/}C&},,

Đầu vào phải được đưa ra trên STDIN.

Ví dụ:

11
01
-
0

111
111
-
1

100
001
001
-
2

11100
10101
11100
-
1

101
010
101
-
5

Xem bình luận ở trên - có vẻ như hình chữ nhật "hợp lệ" cần phải có chiều rộng / chiều cao cả> 1.
Paul R

@PaulR Quy tắc đó không được viết trong câu hỏi, bởi tất cả các định nghĩa hợp lý đó là những hình chữ nhật hoàn toàn tốt - có thể tôi sẽ thêm nó sau.
Howard

Tôi đồng ý với định nghĩa của bạn - Tôi chỉ lưu ý sự khác biệt trong các bình luận - có vẻ như OP cần cập nhật câu hỏi để làm cho nó dứt khoát hơn.
Paul R

Tôi đã làm rõ rằng hình chữ nhật có kích thước 1 là hợp lệ.
microbian

Nhưng bạn cũng đã nói trong các bình luận, để đáp lại: "Chỉ cần làm rõ, các hình chữ nhật suy biến không nên được tính, đúng không? Ví dụ, một 1 hoặc một tiểu đơn / một lớp con của 1 liền kề không hợp lệ?" bằng cách nói: "Có, chúng không hợp lệ và không được tính."
Paul R
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.