ในความท้าทายนี้คุณจะได้รับสองรูปสี่เหลี่ยมผืนผ้าที่ทับซ้อนกันและคุณจำเป็นต้องคำนวณรูปสี่เหลี่ยมผืนผ้าที่สร้างขึ้นโดยการลบหนึ่งจากอื่น ๆ
ตัวอย่างเช่นหากคุณลบสี่เหลี่ยมสีแดงออกจากสีดำ:
คุณท้ายด้วยหนึ่งในสองชุดสี่เหลี่ยมต่อไปนี้:
คุณจะต้องจัดการสิ่งต่อไปนี้ด้วย:
เพื่อให้ชัดเจนยิ่งขึ้น:
- คุณจะป้อนค่าพิกัดของสองรูปสี่เหลี่ยมผืนผ้า A และ B
- คุณต้องแสดงผลสี่เหลี่ยมที่ไม่ได้ซ้อนกันน้อยที่สุดซึ่งครอบคลุมพื้นที่ทั้งหมดของ A โดยไม่มี B การอนุญาตใด ๆ ที่เป็นไปได้จะได้รับอนุญาต
- พิกัดสี่เหลี่ยมถูกส่งผ่านเป็นจำนวนเต็ม 4 ตัว คุณสามารถส่งต่อพวกเขาเป็นสองคู่ (แทนจุดสองมุม) หรือเป็น tuple / list ของจำนวนเต็ม 4 ตัว อินพุตและเอาต์พุตของคุณจะต้องสอดคล้องกัน
- A และ B ไม่จำเป็นต้องทับซ้อนกันหรือสัมผัสและแต่ละอันจะมีพื้นที่อย่างน้อย 1
กรณีทดสอบ:
[(0 0) (5 5)] [(3 4) (8 7)] -> [(0 0) (5 4)] [(0 4) (3 5)] # or [(0 0) (3 5)] [(3 0) (5 4)]
[(2 4) (10 11)] [(5 5) (6 6)] -> [(2 4) (10 5)] [(2 5) (5 6)] [(6 5) (10 6)] [(2 6) (10 11)] #Other sets of 4 rectangles are possible
[(3 3) (8 8)] [(0 1) (10 8)] -> #No rectangles should be output
[(0 0) (5 5)] [(1 1) (10 2)] -> [(0 0) (1 5)] [(1 0) (2 1)] [(2 0) (5 5)] #Other sets of 3 rectangles are possible
[(1 5) (7 8)] [(0 0) (1 10)] -> [(1 5) (7 8)] #Only possible output
[(4 1) (10 9)] [(2 5) (20 7)] -> [(4 1) (10 5)] [(4 7) (10 9)] #Only possible output
[(1 1) (8 8)] [(0 6) (9 9)] -> [(1 1) (8 6)] #Only possible output
นี่คือรหัสกอล์ฟดังนั้นให้เขียนรหัสของคุณให้สั้นที่สุด!
{(x1, y1), (x2, y2)}
ไว้x1 < x2
และy1 < y2
?