หนึ่งในงานอดิเรกทางคณิตศาสตร์ที่ฉันโปรดปรานคือการวาดกริดสี่เหลี่ยมจากนั้นหาสี่เหลี่ยมทั้งหมดที่มองเห็นได้ในกริดนั้น ที่นี่ใช้คำถามนี้และเสี่ยงสำหรับตัวเอง!
คุณสามารถนับจำนวนสี่เหลี่ยมได้หรือไม่
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
| | | | |
| | | | |
+-----+-----+-----+-----+
จำนวนรวมของสี่เหลี่ยมจัตุรัสสำหรับ4 x 4 minichess boardนี้เป็นที่แน่นอน
100
คุณถูกต้องหรือไม่
คณิตศาสตร์ที่เกี่ยวข้อง: มีสี่เหลี่ยมกี่รูปบนกระดานหมากรุกขนาด 8 × 8?
ความท้าทาย
เขียนสั้นฟังก์ชั่น / โปรแกรมนับว่าจำนวนรวมของรูปสี่เหลี่ยมมองเห็นได้ในที่ไม่ใช่วงแหวนตาราง / ภาพ
ความท้าทายที่เกี่ยวข้อง: นับสี่เหลี่ยมที่ไม่ซ้ำใคร! , พบจำนวนสี่เหลี่ยมในอาร์เรย์ไบต์ 2D
รูปแบบอินพุต
ฟังก์ชั่นหรือโปรแกรมของคุณสามารถเลือกทำงานกับอินพุตข้อความหรืออินพุตกราฟิก
อินพุตแบบข้อความ
ตารางจะเป็นม. -by- n ( มแถวnคอลัมน์) ตาราง ASCII ประกอบด้วยอักขระต่อไปนี้:
- ช่องว่าง
-
สำหรับชิ้นส่วนของส่วนของเส้นแนวนอน|
สำหรับชิ้นส่วนของส่วนของเส้นแนวตั้งและ+
สำหรับมุม
คุณสามารถแนะนำกริด ASCII นี้เป็นอินพุต / อาร์กิวเมนต์สำหรับโปรแกรม / ฟังก์ชันของคุณในรูปแบบของ
- สตริงเดี่ยวคั่นด้วยการแบ่งบรรทัด
- สตริงที่ไม่มีบรรทัดใหม่ แต่มีจำนวนเต็มหนึ่งหรือสองตัวที่เข้ารหัสขนาดของกริดหรือ
- อาร์เรย์ของสตริง
หมายเหตุ: อินพุตแบบข้อความมีอย่างน้อย1แถวและอย่างน้อย1คอลัมน์
อินพุตแบบกราฟิก
อีกทางเลือกหนึ่งกริดจะถูกเข้ารหัสเป็นภาพPNGขาวดำที่มีความกว้าง5 * nพิกเซลและสูง5 * mพิกเซล แต่ละภาพประกอบด้วยบล็อก5 px * 5 pxที่สอดคล้องกับอินพุต ASCII โดย:
- ช่องว่างจะถูกแปลงเป็นบล็อคสีขาว บล็อกเหล่านี้เรียกว่าบล็อกช่องว่าง
- ส่วนของเส้นและมุมจะถูกแปลงเป็นบล็อกที่ไม่ใช่สีขาว จุดศูนย์กลางของบล็อกดังกล่าวเป็นสีดำ
- แก้ไข:หากสองมุม (ในอินพุต ASCII) เชื่อมต่อกันด้วยส่วนของเส้นศูนย์บล็อกที่เกี่ยวข้อง (ในอินพุตกราฟิก) ควรเชื่อมต่อด้วยเส้นสีดำด้วย
ซึ่งหมายความว่าแต่ละบล็อกจะได้รับการแต่งตั้งจากเพียง(คลิกที่นี่เพื่อดูภาพขนาดใหญ่)
หมายเหตุ: ขอบเขตสีน้ำเงินเป็นเพียงภาพประกอบเท่านั้น อินพุตกราฟิกเป็นอย่างน้อย5 px และสูง5 px คุณสามารถแปลงอินพุตกราฟิกเป็นภาพขาวดำใด ๆ ซึ่งอาจเป็นรูปแบบไฟล์ภาพอื่น ๆ ) หากคุณเลือกที่จะแปลงโปรดระบุในคำตอบ ไม่มีบทลงโทษสำหรับการเปลี่ยนใจ
รูปแบบผลลัพธ์
หากคุณกำลังเขียนโปรแกรมจะต้องแสดงตัวเลขที่ไม่เป็นลบซึ่งระบุจำนวนสี่เหลี่ยมทั้งหมดในอินพุต
หากคุณกำลังเขียนฟังก์ชั่นมันก็ควรจะส่งกลับจำนวนที่ไม่ใช่เชิงลบที่ระบุจำนวนรวมของรูปสี่เหลี่ยมผืนผ้าในการป้อนข้อมูล
ตัวอย่างคดี
กรณีที่ 1,กราฟิก: ( 30 px * 30 px), ASCII: ( 6แถว, 6คอลัมน์)
+--+
| |
| ++-+
+-++ |
| |
+--+
ผลลัพธ์ที่คาดหวัง: 3
กรณีที่ 2,กราฟิก: ( 20 px * 20พิกเซล), ASCII: ( 4แถว4คอลัมน์)
++-+
|+++
+++|
+-++
ผลลัพธ์ที่คาดหวัง: 6
กรณีที่ 3,กราฟิก: ( 55 px * 40 px), ASCII: ( 8แถว11แถว)
+++--+
+-+++ |
| | ++--+
+--+--++ ++
| ||
| ||
++ +--++
++
ผลลัพธ์ที่คาดหวัง: 9
กรณี 4,กราฟิก: ( 120 px * 65 px), ASCII: ( 13แถว24 คอล )
+--+--+ +--+ +--+ +--+
| | | | | | | | |
+--+--+ | | | | | |
| | | +--+--+--+--+--+
+--+--+ | | | |
| | | | ++
+-+-+-+-+ +--+ +--+ ++
| | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
| | | | | | | | | | | |
+-+-+-+-+-+-+-+-+-+-+-+
ผลลัพธ์ที่คาดหวัง: 243
เคส 5,กราฟิก: ( 5 px * 5 px. ใช่, มันอยู่ที่นั่น!), ASCII: แค่เว้นวรรค
ผลลัพธ์ที่คาดหวัง: 0
กรณี 6,กราฟิก: ( 35 px * 20 px), ASCII: ( 4แถว, 7คอลัมน์)
+--+--+
|++|++|
|++|++|
+--+--+
ผลลัพธ์ที่คาดหวัง: 5
สมมติฐาน
เพื่อให้ชีวิตง่ายขึ้นคุณรับประกันได้ว่า:
- โดยไม่เป็นแบบ Toroidalกริดจะไม่พันตัวในแนวนอนหรือแนวตั้ง
- ไม่มีปลายหลวมเป็นเช่น หรือ
+---
+- -+
ส่วนของเส้นตรงทั้งหมดมีสองด้าน - สองบรรทัดที่ตรงกับ
+
ต้องตัดกันที่จุดนั้น - คุณไม่ต้องกังวลกับอินพุตที่ไม่ถูกต้อง
ใช้กฎกับช่องโหว่มาตรฐาน โปรดรักษาสี่เหลี่ยมเป็นสี่เหลี่ยม คุณสามารถลบช่องว่างต่อท้ายในแต่ละแถวของตาราง
นี่คือรหัสกอล์ฟเพื่อให้รายการของคุณสั้นที่สุด โซลูชั่นข้อความและกราฟิกจะแข่งขันกัน