```
class Solution(object):
def computeArea(self, A, B, C, D, E, F, G, H):
l1 = [A, C, E, G] # x axis
l2 = [B, D, F, H] # y axis
# remove the deplicate part
return self.area(A,B,C,D) +self.area(E,F,G,H)- self.getCoveredLength(l1) * self.getCoveredLength(l2)
def area(self, A, B, C, D):
# calculate the area of rectangle ABCD
return abs(C-A) * abs(D-B)
def getCoveredLength(self, l):
# get the intersection part of two rectangles
sum_len = abs(l[0]-l[1])+abs(l[2]-l[3])
l.sort()
max_len = abs(l[0] - l[-1])
if sum_len < max_len:
# which means no intersection
return 0
return sum_len - max_len
```