This media is not supported in your browser
VIEW IN TELEGRAM
from fnmatch import *
R = []
for x in range(53191, 10**10, 53191):
if fnmatch(str(x), '?136*'):
if str(x)[0] in '02468' and str(x)[-1] in '13579':
R.append([x, x // 53191])
for i in range(-5, 0):
print(*R[i])
from fnmatch import *
Импорт всех функций из модуля fnmatch для работы с шаблонами и строками.
R = []
Создание пустого списка R, куда будут добавляться результаты.
for x in range(53191, 10**10, 53191):
Цикл для перебора чисел от 53191 до 10**10 с шагом 53191.
if fnmatch(str(x), '?136*'):
Проверка, соответствует ли строковое представление числа x шаблону '?136*'.
if str(x)[0] in '02468' and str(x)[-1] in '13579':
Проверка, что первая цифра числа находится в диапазоне '02468', а последняя - в '13579'.
R.append([x, x // 53191])
Добавление пары чисел [x, x // 53191] в список R.
for i in range(-5, 0):
Цикл для вывода последних пяти элементов списка R.
print(*R[i])
Вывод списка элементов с индексами с -5 по -1.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9 5 5 4
This media is not supported in your browser
VIEW IN TELEGRAM
Подготовил для вас методичку по решению 25 задач. Хочу отметить, что это не просто шпаргалка, а скорее пособие, которое поможет вам создать свою собственную "шпору".
В комментариях к этому посту закреплю файл в формате pdf
def Prost(x):
if x == 1:
return False
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True
def Divisors(x):
div = []
for j in range(1, int(x ** 0.5) + 1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))
from fnmatch import *
for x in range(23, 10 ** 9, 23):
if fnmatch(str(x), '12345?7?8'):
print(x, x//23)
x = int(input())
if str(x) == str(x)[::-1]:
print(True)
else:
print(False)
Информатика ЕГЭ | itpy
Поддержать автора: boosty
Please open Telegram to view this post
VIEW IN TELEGRAM
👏12 6 6 1 1
Есть идея сделать ряд постов с разбором 13 номеров, актуально?
Anonymous Poll
95%
✅ Давайте, необходимо и интересно
5%
❌ Легкий/скучный номер
This media is not supported in your browser
VIEW IN TELEGRAM
По заданным IP-адресу узла и маске определите адрес сети.
IP-адрес узла: 129.131.130.64
Маска: 255.255.192.0
Простейшая задача 13 номера с которой стоит начать изучение этих задач. Главная формула:
Адрес сети = Адрес узла & Маска сети
где & - это операция побитовой конъюнкции.
from ipaddress import *
net = ip_network('129.131.130.64/255.255.192.0', 0)
print(net) # 129.131.128.0/18
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
net = ip_network('129.131.130.64/255.255.192.0', 0)
Создание объекта сети net с заданным IP-адресом и маской подсети, причем последний аргумент указывает на коррекцию префикса.
print(net)
Вывод объекта сети net.
# 129.131.128.0/18
Комментарий, указывающий на правильность адресации объекта сети: IP-адрес 129.131.128.0 с маской /18.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Для узла с IP-адресом 224.128.112.142 адрес сети равен 224.128.96.0.
Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.
Маска сети имеет длину 32 бита и вид 1111..000 (сначала единицы, потом нули). Поэтому мы можем перебрать ее значения через for mask in range(32+1):
from ipaddress import *
for mask in range(32+1):
net = ip_network(f'224.128.112.142/{mask}', 0)
if str(net) == f'224.128.96.0/{mask}':
print(str(net.netmask).split('.')[2])
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
Цикл for mask in range(32+1):
Для перебора возможных значений маски сети от 0 до 32 (включительно).
net = ip_network(f'224.128.112.142/{mask}', 0)
Создание объекта сети net с заданным IP-адресом и переменной маской подсети, где последний аргумент указывает на коррекцию префикса.
if str(net) == f'224.128.96.0/{mask}':
Условие проверки соответствия адреса сети определенному значению.
print(str(net.netmask).split('.')[2])
Вывод третьего октета маски подсети из объекта сети net, если условие выполнено.
Please open Telegram to view this post
VIEW IN TELEGRAM
Подсчитал примерно 5-6 основных типов для 13 номера. После постов нужно ли сделать общую Шпаргалку?
Anonymous Poll
100%
✅ Точно надо
0%
❌ Скорее нет
This media is not supported in your browser
VIEW IN TELEGRAM
Два узла, находящиеся в одной сети, имеют IP-адреса 121.171.5.70 и 121.171.5.107.
Укажите наименьшее возможное количество адресов в этой сети.
from ipaddress import *
R = []
for mask in range(32+1):
net1 = ip_network(f'121.171.5.70/{mask}', 0)
net2 = ip_network(f'121.171.5.107/{mask}', 0)
if net1 == net2:
R.append(net1.num_addresses)
print(min(R))
Ответ: 64
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
R = []
Создание пустого списка R, куда будут добавляться результаты.
Цикл for mask in range(32+1):
Для перебора возможных значений маски сети от 0 до 32 (включительно).
net1 = ip_network(f'121.171.5.70/{mask}', 0)
Создание объекта сети net1 с заданным IP-адресом и переменной маской подсети, с коррекцией префикса.
net2 = ip_network(f'121.171.5.107/{mask}', 0)
Создание объекта сети net2 с другим IP-адресом, но той же маской подсети.
if net1 == net2:
Условие проверки, совпадают ли сети net1 и net2.
R.append(net1.num_addresses)
Добавление количества адресов в сети net1 в список R.
print(min(R))
Вывод минимального значения количества адресов среди всех сетей, для которых условие совпадения сетей выполнилось.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор задачи: (C. Горбачёв)
Сеть задана IP-адресом 203.111.195.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, в двоичной записи которых количество нулей кратно трём, а также содержатся три подряд идущие единицы и три подряд идущих нуля одновременно?
В ответе укажите только число.
После того, как мы определили адрес сети с помощью функции ip_network, мы можем перебрать все IP-адреса в этой сети с помощью обычного цикла for ip in net.
from ipaddress import *
net = ip_network('203.111.195.0/255.255.240.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
if s.count('0') % 3 == 0:
if '111' in s and '000' in s:
cnt += 1
print(cnt)
# Ответ: 1043
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
net = ip_network('203.111.195.0/255.255.240.0', 0)
Создание объекта сети net с заданным IP-адресом и маской подсети, с коррекцией префикса.
cnt = 0
Инициализация счетчика cnt для подсчета количества IP-адресов, удовлетворяющих условиям.
Цикл for ip in net:
Для перебора всех IP-адресов в сети net.
s = f'{ip:b}'
Перевод IP-адреса в бинарное представление и сохранение в строковую переменную s.
if s.count('0') % 3 == 0:
Проверка условия: количество нулей в бинарном представлении делится на 3 без остатка.
if '111' in s and '000' in s:
Дополнительная проверка наличия подстрок '111' и '000' в бинарном представлении.
cnt += 1
Увеличение счетчика, если IP-адрес удовлетворяет обоим условиям.
print(cnt)
Вывод общего количества IP-адресов, которые соответствуют условиям.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор задачи: (Л. Шастин)
Сеть, в которой содержится узел с IP-адресом 207.0.A.167, задана маской сети 255.255.255.192, где A - некоторое допустимое для записи IP-адреса число. Определите количество значений A, для которых для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество нулей в левых двух байтах больше суммарного количества нулей в правых двух байтах.
В ответе укажите только число.
По условию задачи требуется перебрать значения допустимого для формирования IP-адреса числа A. Поскольку на каждое число A отводится 1 байт (8 бит), допустимые числа находятся в диапазоне от 0 до 255 (в двоичной системе счисления - от 00000000 до 11111111).
from ipaddress import *
cnt = 0
for A in range(0, 255+1):
net = ip_network(f'207.0.{A}.167/255.255.255.192', 0)
if all(f'{ip:b}'[:16].count('0') > f'{ip:b}'[16:].count('0') for ip in net):
cnt += 1
print(cnt)
# Ответ: 37
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с IP-адресами и сетями.
cnt = 0
Инициализация переменной cnt для подсчета количества IP-адресов, удовлетворяющих условиям.
for A in range(0, 255+1):
Цикл для перебора значения A от 0 до 255 включительно.
net = ip_network(f'207.0.{A}.167/255.255.255.192', 0)
Создание объекта сети net с динамически формируемым IP-адресом, маской подсети и коррекцией префикса.
if all(f'{ip:b}'[:16].count('0') > f'{ip:b}'[16:].count('0') for ip in net):
Проверка условия: количество нулей в первой половине бинарного представления IP-адреса больше чем во второй половине для всех IP-адресов в сети.
cnt += 1
Увеличиваем счетчик, если IP-адрес удовлетворяет условию.
print(cnt)
Вывод количества IP-адресов в созданных сетях, соответствующих условиям.
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Подготовили для вас методическое пособие по решению 13 номера! Сохраняйте все, что нужно знать о задании
В комментариях к этому посту закреплю файл в формате pdf
from ipaddress import *
net = ip_network('адрес сети/маска')
net.netmask
net.num_addresses
net.network_address
for mask in range(33):
net = ip_network(f'адрес узла/{mask}', 0)
for ip in net:
ip_b = f'{ip:b}'
Информатика ЕГЭ | itpy
Поддержать автора: boosty
Please open Telegram to view this post
VIEW IN TELEGRAM
Ребят, сел делать разборы на канал.
Какой номер разбираем следующим?
Какой номер разбираем следующим?
Anonymous Poll
32%
5️⃣
24%
8️⃣
45%
1️⃣4️⃣
Здесь я и другие авторы готовы ответить на все ваши вопросы, касающиеся подготовки к ЕГЭ. Будем рады видеть вас в нашем сообществе!
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Списки - один из наиболее распространенных типов данных в Python. Они представляют собой упорядоченные коллекции объектов, которые могут быть любого типа.
Списки в Python создаются с использованием квадратных скобок []. Вот пример создания списка с различными типами данных:
my_list = [1, 2, "Python", 3.14, True]
print(my_list)
# Выведет: [1, 2, 'Python', 3.14, True]
Элементы списка нумеруются с нуля. Чтобы получить доступ к элементу списка, указывается его индекс в квадратных скобках:
print(my_list[2]) # Обращаемся к элементу с индексом 2
# Выведет: Python
Можно изменить значение элемента списка, просто присвоив новое значение элементу по индексу:
my_list[1] = 10
print(my_list)
# Выведет: [1, 10, 'Python', 3.14, True]
Списки поддерживают различные операции, такие как добавление элемента в конец списка (append), удаление элемента по значению (remove), удаление элемента по индексу (del), слияние списков (extend), и многие другие.
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Если у вас нет полного понимания того, как работает функция enumerate в Python, то давайте разберемся вместе. Метод enumerate() добавляет счетчик к элементам итерируемого объекта и возвращает объект типа enumerate. Этот объект содержит пары значений: индекс элемента и сам элемент из исходного списка.
Одним из главных преимуществ использования метода enumerate является возможность преобразования объектов типа enumerate в список или кортеж с помощью методов list() и tuple() соответственно. Это облегчает работу с индексами элементов списка и упрощает процесс перебора элементов в цикле.
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
Что вы думаете о крайнем посте про enumerate? Хотели бы вы видеть еще подобные Python посты?
Anonymous Poll
84%
✅ Почему бы и да 🙃
16%
❌ Можно летом, сейчас актуальнее разборы задач 🤔
This media is not supported in your browser
VIEW IN TELEGRAM
Уровень: Базовый
Значение выражения 4**34 + 5 * 4**22 + 4**13 + 2 * 4**9 + 82 записали в системе счисления с основанием 16. Сколько разных цифр встречается в этой записи?
Функция hex() является встроенной функцией в Python, которая используется для преобразования целого числа в строку, содержащую его шестнадцатеричное представление.
print(len(set(hex(4**34 + 5*4**22 + 4**13 + 2*4**9 + 82)[2:])))
x = 4**34 + 5*4**22 + 4**13 + 2*4**9 + 82
s = []
while x > 0:
s.append(x % 16)
x //= 16
print(len(set(s)))
# Ответ: 6
x = 4**34 + 5*4**22 + 4**13 + 2*4**9 + 82
В этой строке расчитывается значение переменной x с помощью сложных математических операций.
s = []
Создается пустой список s, который будет использоваться для хранения результатов вычислений.
while x > 0:
Запускается цикл while, который будет выполняться до тех пор, пока переменная x больше нуля.
s.append(x % 16)
Добавляется остаток от деления переменной x на 16 в список s. Это делается для перевода числа в шестнадцатеричную систему счисления.
x //= 16
Значение переменной x делится на 16 с использованием целочисленного деления, чтобы продолжить процесс перевода числа в шестнадцатеричную систему.
print(len(set(s)))
Выводится длина множества уникальных значений списка s, что позволяет определить количество различных цифр, используемых в представлении числа x в шестнадцатеричной системе.
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Новое обновление Телеграма позволяет создавать стикеры не выходя из приложения. Делаюсь маленьким туториалом, пользуйтесь
Информатика ЕГЭ | itpy👨💻
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Уровень: Базовый
Операнды арифметического выражения записаны в системах счисления с основаниями 13 и 18:
8x78y_13 + 79xy7_18
Определите значения x и y, при которых значение данного выражения будет наименьшим и кратно 9. Для найденных значений x и y вычислите частное от деления.
Строчку alphbet можно записать иначе:
from string import *
alphabet = digits + ascii_uppercase
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
R = []
for x in alphabet[:13]:
for y in alphabet[:13]:
A = int(f'8{x}78{y}', 13)
B = int(f'79{x}{y}7', 18)
if (A + B) % 9 == 0:
R.append((A + B) // 9)
print(min(R))
# Ответ: 113024
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
Создается отсортированный список alphabet, содержащий цифры от 0 до 9 и буквы английского алфавита в верхнем регистре.
R = []
Создается пустой список R, в который будут добавляться результаты, удовлетворяющие условию задачи.
for x in alphabet[:13]:
Запускается цикл for, перебирающий элементы alphabet до 13-го (не включительно) и присваивающий их переменной x.
for y in alphabet[:13]:
Запускается вложенный цикл for, перебирающий элементы alphabet до 13-го (не включительно) и присваивающий их переменной y.
A = int(f'8{x}78{y}', 13)
Формируется число A, которое получается из конкатенации строк, представляющих числа в строке, и преобразуется в десятичное число по основанию 13.
B = int(f'79{x}{y}7', 18)
Формируется число B, которое получается аналогично число A, но преобразуется в десятичное число по основанию 18.
if (A + B) % 9 == 0:
Проверяется условие, что сумма чисел A и B делится на 9 без остатка.
R.append((A + B) // 9)
Если условие выполняется, результат деления суммы A и B на 9 добавляется в список R.
print(min(R))
Выводится минимальное значение из списка R, которое является ответом на задачу.
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM