Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for IP Network: Route Summarization by rodka81
def ip_to_bits(ip):
return ''.join(["{:08b}".format(int(n)) for n in ip.split(".")])
def bits_to_ip(bits):
return [str(int(bits[i*8:i*8+8], 2)) for i in range(4)]
def checkio(data):
addresses = [ip_to_bits(ip) for ip in data]
i = 0
ads = list(zip(*addresses))
while i < 32:
bits = ads[i]
if not all(x == bits[0] for x in bits):
break
i += 1
common_bits = "{:0<32}".format(addresses[0][:i])
return ".".join(bits_to_ip(common_bits)) + "/{}".format(i)
#These "asserts" using only for self-checking and not necessary for auto-testing
if __name__ == '__main__':
assert (checkio(["172.16.12.0", "172.16.13.0", "172.16.14.0", "172.16.15.0"]) == "172.16.12.0/22"), "First Test"
assert (checkio(["172.16.12.0", "172.16.13.0", "172.155.43.9"]) == "172.0.0.0/8"), "Second Test"
assert (checkio(["172.16.12.0", "172.16.13.0", "172.155.43.9", "146.11.2.2"]) == "128.0.0.0/2"), "Third Test"
Dec. 11, 2016