aboutsummaryrefslogtreecommitdiff
path: root/challenge-152/sgreen/python/ch-2.py
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-02-19 11:17:33 +0000
committerGitHub <noreply@github.com>2022-02-19 11:17:33 +0000
commite6c263efac18c6d3e88b2ec3139e6d53c327466e (patch)
tree5eb39549795784bc9f37c1ffaabb856e91ba705a /challenge-152/sgreen/python/ch-2.py
parentcf38ab6faa9befb1deb2d07f9fd2c473152f8ed3 (diff)
parentb6862b3f5784018439b080ec6c5faf5ef7642dd9 (diff)
downloadperlweeklychallenge-club-e6c263efac18c6d3e88b2ec3139e6d53c327466e.tar.gz
perlweeklychallenge-club-e6c263efac18c6d3e88b2ec3139e6d53c327466e.tar.bz2
perlweeklychallenge-club-e6c263efac18c6d3e88b2ec3139e6d53c327466e.zip
Merge pull request #5676 from simongreen-net/master
sgreen solutions to challenge 152
Diffstat (limited to 'challenge-152/sgreen/python/ch-2.py')
-rwxr-xr-xchallenge-152/sgreen/python/ch-2.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/challenge-152/sgreen/python/ch-2.py b/challenge-152/sgreen/python/ch-2.py
new file mode 100755
index 0000000000..668bc38018
--- /dev/null
+++ b/challenge-152/sgreen/python/ch-2.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python3
+
+import re
+import sys
+
+
+class Rectangle:
+ def __init__(self, x1, y1, x2, y2):
+ # Ensure x1 is the left side
+ if (x1 > x2):
+ (x1, x2) = (x2, x1)
+ # Ensure y1 is the bottom side
+ if (y1 > y2):
+ (y1, y2) = (y2, y1)
+
+ self.x1 = x1
+ self.x2 = x2
+ self.y1 = y1
+ self.y2 = y2
+
+ def area(self):
+ # Return the area of the rectangle
+ return (self.x2-self.x1) * (self.y2 - self.y1)
+
+
+def main(s):
+ numbers = list(map(int, re.findall(r'-?\d+', s)))
+
+ # Find out the combined area of the two rectangles
+ rect1 = Rectangle(*numbers[0:4])
+ rect2 = Rectangle(*numbers[4:8])
+ area = rect1.area() + rect2.area()
+
+ # Calculate any overlap
+ dx1 = max(rect1.x1, rect2.x1)
+ dy1 = max(rect1.y1, rect2.y1)
+ dx2 = min(rect1.x2, rect2.x2)
+ dy2 = min(rect1.y2, rect2.y2)
+
+ # If there is, remove that from the calculations
+ if dx1 < dx2 and dy1 < dy2:
+ d = Rectangle(dx1, dy1, dx2, dy2)
+ area -= d.area()
+
+ print(area)
+
+
+if __name__ == '__main__':
+ main(sys.argv[1])