题解 | 判断两个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


全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务