题解 | 判断两个IP是否属于同一子网
import re
ip_pattern = re.compile(r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$')
def validate_ip(ip):
return bool(ip_pattern.match(ip))
def validate_mask(mask):
if not validate_ip(mask) or mask in {'0.0.0.0', '255.255.255.255'}:
return False
binary = ''.join(f'{int(x):08b}' for x in mask.split('.'))
return '01' not in binary
while True:
try:
msk, ip1, ip2 = input().strip(), input().strip(), input().strip()
if not all([validate_mask(msk), validate_ip(ip1), validate_ip(ip2)]):
print(1)
continue
m, a, b = ([int(x) for x in s.split('.')] for s in (msk, ip1, ip2))
print(0 if all((a[i] & m[i]) == (b[i] & m[i]) for i in range(4)) else 2)
except:
break
