diff options
Diffstat (limited to 'challenge-152/sgreen/python')
| -rwxr-xr-x | challenge-152/sgreen/python/ch-1.py | 14 | ||||
| -rwxr-xr-x | challenge-152/sgreen/python/ch-2.py | 49 |
2 files changed, 63 insertions, 0 deletions
diff --git a/challenge-152/sgreen/python/ch-1.py b/challenge-152/sgreen/python/ch-1.py new file mode 100755 index 0000000000..42da600bc0 --- /dev/null +++ b/challenge-152/sgreen/python/ch-1.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python3 + +import sys +import json + + +def main(json_string): + # Read the input + triangle = json.loads(json_string) + print(sum(map(lambda x: min(x), triangle))) + + +if __name__ == '__main__': + main(sys.argv[1]) 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]) |
