aanodin

Untitled

Apr 29th, 2020
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.80 KB | None | 0 0
  1.  
  2. def addr_to_int(addr):
  3.     octet = [int(x) for x in addr.split('.')]
  4.     a = octet[0] << 24
  5.     b = octet[1] << 16
  6.     c = octet[2] << 8
  7.     d = octet[3]
  8.     return a + b + c + d
  9.  
  10.  
  11. subnet, subnet_mask_num = input().split('/')
  12. subnet = addr_to_int(subnet)
  13. subnet_mask_num = int(subnet_mask_num)
  14. subnet_mask = 0xFFFFFFFF << (32 - subnet_mask_num)
  15.  
  16.  
  17. N = int(input())
  18. addresses = []
  19. for i in range(N):
  20.     addresses.append(addr_to_int(input()))
  21.  
  22.  
  23. first_addr = subnet & subnet_mask
  24. all_addr = 2 ** (32 - subnet_mask_num)
  25. broadcast = first_addr + all_addr - 1
  26.  
  27.  
  28. occupied = 0
  29. for addr in addresses:
  30.     if addr == first_addr or addr == broadcast:
  31.         print(-1)
  32.         exit(0)
  33.  
  34.     if addr >= first_addr and addr <= broadcast:
  35.         occupied += 1
  36.  
  37. print(all_addr - occupied - 2)
Add Comment
Please, Sign In to add comment