题解 | 判断两个IP是否属于同一子网(我最短!)

mask = input()
ip1 = input()
ip2 = input()

# 判断是否为合法IP格式(每小节都在0~255之间)
isLegalIP = lambda *s: all(map(lambda s: all(map(lambda x: 0 <= int(x) < 256, s.split("."))), s))
# 判断是否为合法的掩码(0不能出现在1之前(每小节转换为整数后输出为8位二进制字符串并拼接,“01”不能出现在拼接后的字符串内))
isLegalMask = lambda s: "01" not in"".join(map(lambda s: str(f"{int(s):08b}"), s.split(".")))
# 与运算(拆分为每个小节之后,每个小节进行与运算,得到4个整数)
and_ = lambda s1,s2: map(lambda t: int(t[0]) & int(t[1]), zip(s1.split("."), s2.split(".")))
# 对比两次与运算的结果(4个整数都相等)
compare = lambda s1,s2: all(map(lambda t: t[0] == t[1], zip(s1, s2)))
print([1, [2, 0][compare(and_(mask, ip1), and_(mask, ip2))]][isLegalIP(ip1, ip2, mask) and isLegalMask(mask)])

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务