ค้นหาจำนวนของรูปสี่เหลี่ยมในอาร์เรย์ 2D ไบต์


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

คุณจะได้รับอาร์เรย์ 2 มิติที่มีขนาดไบต์ mx n มีการรับประกันว่าไบต์ทั้งหมดเป็น 1 หรือ 0 ของ ค้นหาจำนวนของรูปสี่เหลี่ยมผืนผ้าที่แทนด้วย 1 เมื่อดูใน 2d ดังที่แสดงด้านบน

เฉพาะรูปสี่เหลี่ยมที่เติมเต็มเท่านั้นที่จะถูกพิจารณาเพื่อนับ
รูปสี่เหลี่ยมผืนผ้าจะต้องล้อมรอบด้วย 0 เว้นแต่ว่าพวกเขาอยู่บนขอบ

ตัวอย่างเช่นในอาร์เรย์ด้านบนมี 5 รูปสี่เหลี่ยมที่ถูกต้อง

คุณสามารถใช้ภาษาใดก็ได้


1
ฉันคิดว่าวิธีที่ดีกว่าที่จะบอกว่า: สี่เหลี่ยมต้องล้อมรอบด้วย 0 หรือขอบ
Cruncher

เสร็จสิ้น ขอบคุณที่ใช้ถ้อยคำเป็นภาษาอังกฤษที่ดีกว่า
microbian

เกี่ยวกับ1100\n1100\n0011\n0011อะไร
Cruncher

1
ฉันคิดว่านั่นเป็นเหตุผลที่ฉันเขียน 'ติดกัน / ทับซ้อนกัน' นี่เป็นรูปสี่เหลี่ยมผืนผ้า 2 อันที่ถูกต้องจากความตั้งใจครั้งแรกของฉัน แต่สภาพ 'รอบ' กำลัง จำกัด พวกเขาในขณะนี้ คุณมีวิธีที่ดีกว่าในการอธิบายมันไหม
microbian

1
ถึงแม้จะติดกันก็ตามมันก็คลุมเครือไม่ว่าเส้นทแยงมุมหมายถึงติดกันหรือไม่ก็ตาม ความคลุมเครือเดียวกันไม่ว่าจะล้อมรอบด้วยวิธีการหรือไม่ล้อมรอบที่มุมหรือเพียงด้าน
Cruncher

คำตอบ:


2

GolfScript, 107 ตัวอักษร

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

อินพุตต้องถูกกำหนดบน STDIN

ตัวอย่าง:

11
01
-
0

111
111
-
1

100
001
001
-
2

11100
10101
11100
-
1

101
010
101
-
5

ดูความคิดเห็นด้านบน - ดูเหมือนว่ารูปสี่เหลี่ยม "ถูกต้อง" ต้องมีทั้งความกว้าง / ความสูง> 1
Paul R

@ PaulR กฎนั้นไม่ได้เขียนในคำถามโดยคำจำกัดความที่สมเหตุสมผลทั้งหมดนั้นเป็นรูปสี่เหลี่ยมที่ดีอย่างสมบูรณ์ - บางทีฉันอาจจะเพิ่มในภายหลัง
Howard

ฉันเห็นด้วยกับคำจำกัดความของคุณ - ฉันเพิ่งสังเกตเห็นความแตกต่างในความคิดเห็น - ดูเหมือนว่า OP จำเป็นต้องอัปเดตคำถามเพื่อให้ชัดเจนยิ่งขึ้น
Paul R

ฉันชี้แจงว่าสี่เหลี่ยมผืนผ้าขนาด 1 นั้นถูกต้อง
microbian

แต่คุณยังได้กล่าวถึงความคิดเห็นในการตอบสนองต่อ: "เพียงเพื่อความกระจ่างความเสื่อมของรูปสี่เหลี่ยมไม่ควรนับถูกต้องหรือไม่ตัวอย่างเช่น 1 เดียวหรือ subrow / subcolumn เดียวของ 1 ที่อยู่ติดกันไม่ถูกต้องหรือไม่" โดยพูดว่า: "ใช่พวกเขาไม่ถูกต้องและไม่ควรนับ"
พอล R
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.