from .util import mask, get_data, cidr4_to_node, make_cidr4 def f(x, y): t = x b = y if x[1]>y[1]: t = y b = x ip1, l1, a1 = t ip2, l2, a2 = b if ip1 & mask[l1] == ip2 & mask[l1]: return (0, t) t1 = t2 = 0 while not l1==l2: t2 += 2**(32-l2) l2 -= 1 ip2 = ip2 & mask[l2] while not ip1 & mask[l1-1] == ip2 & mask[l2-1]: t1 += 2**(32-l1) l1 -= 1 ip1 = ip1 & mask[l1] t2 += 2**(32-l2) l2 -= 1 ip2 = ip2 & mask[l2] r = (ip1 & mask[l1-1], l1-1, a1+a2+t1+t2) return (t1+t2, r) def solution(cidrs, M): cidrs = sorted((ip, l, 0) for ip, l in cidrs) while len(cidrs)>M: t = (None, float('+inf'), None) for i, (x, y) in enumerate(zip(cidrs, cidrs[1:])): m, r = f(x, y) if m