Temukan jumlah persegi panjang dalam array byte 2D

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

Anda diberi array 2 dimensi byte ukuran mx n. Dijamin bahwa semua byte adalah 1 atau 0. Temukan jumlah persegi panjang yang diwakili oleh 1 ketika dilihat dalam 2d, seperti yang ditunjukkan di atas.

Hanya persegi yang terisi penuh yang dipertimbangkan untuk dihitung.
Persegi panjang harus dikelilingi oleh 0 kecuali jika berada di tepi (1 persegi panjang yang menyentuh secara diagonal adalah Oke, meskipun (lihat contoh.)).

Misalnya, dalam array di atas ada 5 persegi panjang yang valid.

Anda dapat menggunakan bahasa apa pun.

mikrobia
sumber
1
Saya pikir cara yang lebih baik untuk mengatakannya adalah dengan mengatakan bahwa: persegi panjang harus dikelilingi oleh 0's, atau edge
Cruncher
Selesai Terima kasih telah mengucapkannya dalam bahasa Inggris yang lebih baik.
microbian
Bagaimana dengan 1100\n1100\n0011\n0011?
Cruncher
1
Saya pikir itu sebabnya saya menulis 'berdampingan / tumpang tindih'. Ini adalah 2 persegi panjang yang valid dari niat awal saya. Tetapi kondisi 'sekitarnya' membatasi mereka sekarang. Apakah Anda memiliki cara yang lebih baik untuk menjelaskannya
microbian
1
Bahkan di sebelahnya tidak jelas apakah diagonal berarti berdekatan atau tidak. Ambiguitas yang sama apakah dikelilingi atau tidak, dikelilingi di sudut-sudut, atau hanya sisi
Cruncher

Jawaban:

2

GolfScript, 107 karakter

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

Masukan harus diberikan pada STDIN.

Contoh:

11
01
-
0

111
111
-
1

100
001
001
-
2

11100
10101
11100
-
1

101
010
101
-
5
Howard
sumber
Lihat komentar di atas - tampaknya persegi panjang "valid" harus memiliki lebar / tinggi keduanya> 1.
Paul R
@ PaulR Aturan itu tidak ditulis dalam pertanyaan, oleh semua definisi yang masuk akal itu adalah empat persegi panjang yang sangat baik - mungkin saya akan menambahkannya nanti.
Howard
Saya setuju dengan definisi Anda - Saya baru saja mencatat perbedaan dalam komentar - sepertinya OP perlu memperbarui pertanyaan untuk membuatnya lebih definitif.
Paul R
Saya mengklarifikasi bahwa persegi panjang ukuran 1 valid.
microbian
Tetapi Anda juga mengatakan dalam komentar, dalam menanggapi: "Hanya untuk klarifikasi, persegi panjang yang merosot tidak boleh dihitung, benar? Misalnya, apakah 1 atau satu subrow / sub-kolom dari 1 yang berdekatan tidak valid?" dengan mengatakan: "Ya, itu tidak valid, dan tidak boleh dihitung."
Paul R