Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
4 lines solution in Clear category for IP Network: Route Summarization by CDG.Axel
def checkio(data):
"""
1. Transform list to binary ip
2. Find first position when symbols different (idx)
3. Form mask started from same digits then zeros
4. Return mask in ip form and idx
"""
lst = [''.join(f'{int(d):08b}' for d in ip.split('.')) for ip in data]
idx = next((j for j, e in enumerate(1 == len(set(i)) for i in zip(*lst)) if not e), 32)
mask = lst[0][:idx] + '0' * (32-idx)
return f"{'.'.join(str(int(mask[i*8:(i+1)*8], 2)) for i in range(4))}/{idx}"
#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"
Oct. 15, 2021