58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
##N, L, B = input().strip().split()
|
|
##S, D = input().strip().split()
|
|
|
|
class Range():
|
|
|
|
def __init__(self, ranges):
|
|
self.ranges = ranges
|
|
|
|
def __add__(self, other):
|
|
new_ranges = list(self.ranges)
|
|
for rang1 in other.ranges:
|
|
for i, rang2 in enumerate(new_ranges):
|
|
if rang1[0] <= rang2[0] and rang1[1] >= rang2[1]:
|
|
new_ranges[i] = rang1
|
|
break
|
|
if rang1[0] >= rang2[0] and rang1[1] <= rang2[1]:
|
|
break
|
|
if rang1[1] >= rang2[0]-1 and rang1[1] <= rang2[1]:
|
|
new_ranges[i] = (rang1[0], rang2[1])
|
|
break
|
|
if rang1[0] >= rang2[0] and rang1[0] <= rang2[1]+1:
|
|
new_ranges[i] = (rang2[0], rang1[1])
|
|
break
|
|
else:
|
|
new_ranges.append(rang1)
|
|
return Range(new_ranges)
|
|
|
|
def __mul__(self, other):
|
|
new_ranges = []
|
|
for rang1 in other.ranges:
|
|
cand = rang1
|
|
for rang2 in self.ranges:
|
|
if rang1[0] <= rang2[0] and rang1[1] >= rang2[1]:
|
|
cand = rand2
|
|
elif rang1[0] >= rang2[0] and rang1[1] <= rang2[1]:
|
|
pass
|
|
elif rang1[1] >= rang2[0] and rang1[1] <= rang2[1]:
|
|
cand (rang2[0], rang1[1])
|
|
elif rang1[0] >= rang2[0] and rang1[0] <= rang2[1]:
|
|
cand = (rang1[0], rang2[1])
|
|
else:
|
|
break
|
|
else:
|
|
new_ranges.append(cand)
|
|
return Range(new_ranges)
|
|
|
|
def __repr__(self):
|
|
return str(*self.ranges)
|
|
|
|
def __str__(self):
|
|
return str(self.ranges)
|
|
|
|
Range.INF = Range([(-float('inf'), float('inf'))])
|
|
|
|
a = Range.INF
|
|
b = Range([(3, 4)])
|
|
print(a+b)
|