n1, n2, n3, n4 = map(int, input().split('.'))
m1, m2, m3, m4 = map(int, input().split('.'))
def is_valid_ip(n1, n2, n3, n4):
if (0 <= n1 <= 255) and (0 <= n2 <= 255) and (0 <= n3 <= 255) and (0 <= n4 <= 255):
if not (n1 == 0 and n2 == 0 and n3 == 0 and n4 == 0) and not (n1 == 255 and n2 == 255 and n3 == 255 and n4 == 255):
return True
return False
def is_valid_mask(m1, m2, m3, m4):
mask = f'{m1:08b}{m2:08b}{m3:08b}{m4:08b}'
if '01' in mask:
return False
return True
if is_valid_ip(n1, n2, n3, n4) and is_valid_mask(m1, m2, m3, m4):
print(f'{n1 & m1}.{n2 & m2}.{n3 & m3}.{n4 & m4}')
else:
print('Валидация не пройдена')
В этой задаче вам нужно сначала определить, что IP-адрес и маска являются корректными. Условия такие же, как и в прошлых задачах.
Далее по введенным IP-адресу и маске нужно определить адрес подсети. Сделать это можно с помощью битовой конъюнкции, например, первое число адреса можно определить выражением n1 & m1.
Напоминаем вам условия коректности:
Числа IP-адреса и маски должны быть в интервале от 0 до 255
IP-адрес не может быть равным 0.0.0.0 и 255.255.255.255
Маска в двоичном представлениии должна иметь сначала подряд идущие идиницы, а затем только нули. Например, маска 255.255.254.0 в двоичном представлении равна 11111111 11111111 11111110 00000000 – это корректная маска. Но вот, например, 255.0.0.1 (11111111 00000000 00000000 00000001) уже не корректная.
Учитывайте, что маска 1.1.1.1 тоже не является правильной, так как в двоичном представлении у нее нули и единицы перемешиваются 00000001 00000001 00000001 00000001
Вашей программе на вход поступают 8 целых неотрицательных чисел n1, n2, n3, n4 – числа обозначающие IP-адрес, и m1,m2,m3,m4 – числа, обозначающие маску. Они уже введены в программу.
Вам нужно вывести, в случае если маска или IP-адрес не являются корректными, фразу Валидация не пройдена.
Если данные корректны, нужно вычислить адрес подсети, например для IP-адреса 127.254.0.1 и маски 255.128.0.0 результат равен:
127 & 255 = 127
254 & 128 = 128
0 & 0 = 0
1 & 0 = 0
Sample Input 1:
127.254.0.1
255.128.0.0
Sample Output 1:
127.128.0.0
Sample Input 2:
0.0.0.0
255.128.0.0
Sample Output 2:
Валидация не пройдена
Sample Input 3:
127.254.0.1
255.128.1.0
Sample Output 3:
Валидация не пройдена
Sample Input 4:
255.256.255.255
1.1.1.1
Sample Output 4:
Валидация не пройдена
Sample Input 5:
255.255.255.255
255.128.0.0
Sample Output 5:
Валидация не пройдена
Sample Input 6:
255.254.255.255
255.255.128.0
Sample Output 6:
255.254.128.0