Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Creative category for IP Network: Route Summarization by check-side
def checkio(data):
octetts = [[] for _ in range(4)]
for ipaddress in data:
octett = ipaddress.split(".")
for index in range(4):
oct_binary = int(octett[index])
oct_binary = "{0:b}".format(oct_binary)
oct_binary = oct_binary.rjust(8, "0")
octetts[index].append(oct_binary)
ipaddress_summarized = [[] for _ in range(4)]
counter, flag = 0, True
for index in range(4):
for bit in range(8):
all_bits = [octetts[index][i][bit] for i in range(len(data))]
if len(set(all_bits)) == 1 and flag:
counter += 1
ipaddress_summarized[index].append(all_bits[0])
else:
flag = False
ipaddress_summarized[index].append("0")
ipaddress_summarized = [str(int("".join(x), 2)) for x in ipaddress_summarized]
return ".".join(ipaddress_summarized) + "/" + str(counter)
# 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"
July 10, 2024