import sys
sys.setrecursionlimit(10000)
def F(n):
if n == 1:
return 1
if n > 1:
return (n - 1) * F(n - 1)
print((2*F(2024) - F(2023)) / F(2022))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(a+2, b) + F(a+3, b)
print(F(3, 9) * F(9, 13))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
M = [int(x) for x in open('17.txt')]
D = [x for x in M if x > 0]
R = []
for i in range(len(M)-1):
x, y = M[i], M[i+1]
if x < 0 or y < 0:
if x + y % min(D) == 0:
R.append(x + y)
print(len(R), max(R))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
cnt = 0
for s in open('9.csv'):
M = [int(x) for x in s.split(';')]
copied = [x for x in M if M.count(x) == 2]
not_copied = [x for x in M if M.count(x) == 1]
if len(copied) == 4 and len(not_copied) == 2:
if sum(copied) < sum(not_copied):
cnt += 1
print(cnt)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
def F(x, y):
return (x + y <= 26) or (y <= x - 4) or (y >= A)
for A in range(1000):
if all(F(x, y) for x in range(100) for y in range(100)):
print(A)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Использование метода форматирования строк
.format()
в Python является широко распространенным способом работы со строками. Однако, с появлением f-строк (f-strings)
в Python 3.6, разработчики получили удобный и современный способ форматирования строк.f-строки позволяют встраивать значения переменных непосредственно в строку без необходимости использования метода
.format()
. Это делает код более читаемым, компактным и удобным для использования. user = "Андрей"
action = "покупка"
log_message = f'Пользователь {user} зашел на сайт и выполнил действие: {action}'
print(log_message)
# Пользователь Андрей зашел на сайт и выполнил действие: покупка
В данном коде мы использовали префикс f перед строкой, а затем в фигурных скобках указали переменные, которые хотим вставить в строку. Python автоматически подставит значения этих переменных при формировании строки.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Основная волна 19.06.24
Уровень: Базовый
Определите, какова сумма протяжённостей дорог из пункта F в пункт B и из пункта E в пункт D.
Данный код позволяет нам в универсальном случае определить последовательность вершин графа. И если знаем вершины, то не сложно найти длины и сумму длин!
from itertools import permutations
table = '12 15 16 21 23 24 32 36 37 42 47 51 56 61 63 65 73 74'
graph = 'AB BA AF FA FB BF FE EF BD DB ED DE EC CE DG GD CG GC'
for per in permutations('ABCDEFG'):
new_table = table
for i in range(1, 7+1):
new_table = new_table.replace(str(i), per[i-1])
if set(new_table.split()) == set(graph.split()):
print('1 2 3 4 5 6 7')
print(*per)
# 1 2 3 4 5 6 7
# B D E G A F C
# FB = 53, ED = 2, => 55
# 1 2 3 4 5 6 7
# F E D C A B G
# ED = 53, FB = 2, => 55
from itertools import permutations
Импортируем функцию permutations из модуля itertools для генерации всех возможных перестановок элементов.
table = '12 15 16 21 23 24 32 36 37 42 47 51 56 61 63 65 73 74'
Определяем строку 'table', представляющую набор чисел, разделенных пробелами, которые описывают соединения в графе.
graph = 'AB BA AF FA FB BF FE EF BD DB ED DE EC CE DG GD CG GC'
Определяем строку 'graph', которая описывает возможные связи между буквами A, B, C, D, E, F, G в графе.
for per in permutations('ABCDEFG'):
Запускаем цикл, перебирающий все возможные перестановки букв A, B, C, D, E, F, G.
new_table = table
Создаем копию строки 'table', чтобы постепенно заменять числа на соответствующие буквы из текущей перестановки.
for i in range(1, 7 + 1):
Запускаем вложенный цикл, который проходит по всем числам от 1 до 7.
new_table = new_table.replace(str(i), per[i - 1])
Заменяем каждое число в 'new_table' на соответствующую букву из текущей перестановки 'per', используя индексы.
if set(new_table.split()) == set(graph.split()):
Проверяем, совпадает ли множество уникальных элементов в 'new_table' с множеством уникальных элементов в 'graph'.
print('1 2 3 4 5 6 7')
Если множества совпадают, выводим строку '1 2 3 4 5 6 7', что означает, что найдено подходящее соответствие.
print(*per)
Печатаем текущее соответствие букв из перестановки, используя распаковку для форматированного вывода.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем хороших выходных! 👋
Я вернулся из отпуска (затишья), который был мне очень нужен после всей этой канители с экзаменами и пересдачами.. В планах радовать вас постоянным контентом: новыми разборами задач, короткими видео, шпаргалками, статьями про Python и новыми курсами. Да-да, все это время мы работали над созданием полезных материалов для вас.
Главной нашей целью до конца лета является создание бесплатного курса "Питон для успешной сдачи ЕГЭ". Будем считать, что это анонс!😅
Я вернулся из отпуска (затишья), который был мне очень нужен после всей этой канители с экзаменами и пересдачами.. В планах радовать вас постоянным контентом: новыми разборами задач, короткими видео, шпаргалками, статьями про Python и новыми курсами. Да-да, все это время мы работали над созданием полезных материалов для вас.
Главной нашей целью до конца лета является создание бесплатного курса "Питон для успешной сдачи ЕГЭ". Будем считать, что это анонс!
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Е. Джобс
Уровень: Средний
Автомат обрабатывает натуральное число N > 1 по следующему алгоритму:
1. Строится двоичная запись числа N.
2. В записи последний ноль заменяется на первые две цифры в полученной записи.
3. Запись записывается справа налево (в обратную сторону).
4. Полученное двоичное число переводится в десятичную систему счисления.
Для какого максимального значения в результате работы алгоритма получится число 119?
Про возможность обрабатывать исключения try я писал в этом посте.
R = []
for n in range(2, 1000):
s = f'{n:b}'
try:
m = s.rindex('0')
s = s[:m] + s[:2] + s[m+1:]
s = s[::-1]
r = int(s, 2)
if r == 119:
R.append(n)
except Exception as E:
print(s, E)
print(max(R))
# Ответ: 58
R = []
Создаем пустой список R для хранения чисел, которые будут соответствовать заданным условиям.
for n in range(2, 1000):
Запускаем цикл, перебирающий числа от 2 до 999 включительно.
s = f'{n:b}'
Преобразуем текущее число n в строку, содержащую его двоичное представление.
try:
Начинаем блок try для обработки возможных исключений в последующем коде.
m = s.rindex('0')
Находим индекс последнего вхождения символа '0' в строке s.
s = s[:m] + s[:2] + s[m+1:]
Формируем новую строку: оставляем часть до последнего '0', вставляем первые два символа исходной строки и добавляем оставшуюся часть исходной строки после последнего '0'.
s = s[::-1]
Переворачиваем строку s задом наперед.
r = int(s, 2)
Преобразуем строку s обратно в целое число из двоичной системы счисления.
if r == 119:
Проверяем, равно ли получившееся число 119.
R.append(n)
Если условие верно, добавляем исходное число n в список R.
except Exception as E:
Обрабатываем возможные исключения, которые могут возникнуть в блоке try.
print(s, E)
В случае исключения выводим текущую строку s и описание ошибки E.
print(max(R))
Выводим максимальное число из списка R.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Test ОГЭ | itpy 👨💻
Строки в Python – это один из самых важных типов данных. Они позволяют работать с текстовой информацией, и знание методов работы со строками существенно упростит решение задач на ЕГЭ.
Метод strip() удаляет пробелы (или другие символы) из начала и конца строки. Это полезно для очистки пользовательского ввода.
text = " Привет, мир! "
cleaned_text = text.strip()
print(cleaned_text) # "Привет, мир!"
Эти методы позволяют изменять регистр строки. lower() преобразует строку в нижний регистр, а upper() – в верхний.
text = "ПрIvEt"
print(text.lower()) # "привет"
print(text.upper()) # "ПРИВЕТ"
Метод replace(old, new, count) заменяет подстроку old на new в строке count раз.
text = "Я люблю Python!"
new_text = text.replace("Python", "программирование")
print(new_text) # "Я люблю программирование!"
Метод split(separator) разделяет строку на части по указанному разделителю. Если разделитель не указан, используется пробел.
text = "яблоко груша банан"
fruits = text.split() # по умолчанию разделяет по пробелам
print(fruits) # ['яблоко', 'груша', 'банан']
Метод join(iterable) соединяет элементы списка (или другого итерируемого объекта) в строку с указанным разделителем.
fruits = ['яблоко', 'груша', 'банан']
result = ', '.join(fruits)
print(result) # "яблоко, груша, банан"
Метод find(substring) ищет подстроку в строке и возвращает индекс, с которого начинается первая встреча. Если подстрока не найдена, возвращает -1.
text = "Привет, мир!"
index = text.find("мир")
print(index) # 8
Метод count(substring) возвращает количество вхождений подстроки в строку.
text = "яблоко, груша, яблоко"
count = text.count("яблоко")
print(count) # 2
Эти методы проверяют, начинается ли строка с указанной подстроки или заканчивается ли ею.
text = "Привет, мир!"
print(text.startswith("Привет")) # True
print(text.endswith("мир!")) # True
Практикуйтесь в использовании этих методов, чтобы запомнить синтаксис и логику работы с ними. Удачи в подготовке!
Информатика ЕГЭ | itpy 🧑💻
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Test ОГЭ | itpy 👨💻
В Python есть ряд встроенных функций, которые могут работать со строками и другими коллекциями. Эти функции помогут вам эффективно обрабатывать текстовую информацию. Давайте рассмотрим каждую из них с примерами.
Функция len() возвращает длину строки (количество символов в строке).
text = "Привет, мир!"
length = len(text)
print(length) # 13 (включая пробел и знак препинания)
Функции max() и min() ищут максимальный и минимальный элементы в последовательности. При работе со строками, они будут выдавать соответственно строку с максимальным или минимальным символом на основе их ASCII (или Unicode) значений.
text = "abcde"
max_char = max(text)
min_char = min(text)
print(max_char) # "e"
print(min_char) # "a"
Если строка состоит из символов, имеющих различный регистр, учтите, что символы в верхнем регистре имеют меньшие значения, чем в нижнем.
text = "Python"
max_char = max(text)
min_char = min(text)
print(max_char) # "y" (максимальный символ)
print(min_char) # "P" (минимальный символ)
Функция sorted() возвращает новый список, содержащий элементы исходного итерируемого объекта, отсортированные по возрастанию. При этом строки сортируются посимвольно.
text = "hello"
sorted_text = sorted(text)
print(sorted_text) # ['e', 'h', 'l', 'l', 'o']
Чтобы получить отсортированную строку, можно использовать метод join():
sorted_string = ''.join(sorted(text))
print(sorted_string) # "ehllo"
Функция set() создает множество, состоящее из уникальных элементов. При работе со строками это позволяет удалить дубликаты.
text = "hello world"
unique_chars = set(text)
print(unique_chars) # {'h', 'e', 'l', 'o', ' ', 'w', 'r', 'd'}
☝️Заметьте, что при использовании множества порядок символов не сохраняется, поскольку множества не имеют порядка.
Данные функции являются мощными инструментами в обработке строк в Python. Их понимание и умелое использование поможет вам эффективно решать задачи на экзаменах и в программировании в целом.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Л. Шастин
Уровень: Средний
У исполнителя есть три команды, которым присвоены номера:
A. Прибавить 2
B. Прибавить 3
C. Умножить на 2
Сколько существует программ, для которых при исходном числе 3 результатом является число 20, а последняя в них команда - A или С?
В данной задачи для исследования порядка команд мы передаем строчный аргумент С, который принимает номера каждой новой команды. Таким образом мы можем проверить последнюю команду на условие.
def F(a,b, c: str):
if a >= b:
return a == b and c[-1] != 'B'
return F(a + 2, b, c + 'A') + F(a + 3, b, c + 'B') + F(a*2, b, c + 'C')
print(F(3,20,''))
# Ответ: 60
1️⃣
def F(a,b, c: str):
Объявление функции F с тремя параметрами: числовыми параметрами a, b и строковым параметром c
2️⃣
if a >= b:
Проверяем, если значение a больше или равно значению b
3️⃣
return a == b and c[-1] != 'B'
Возвращаем результат логического выражения, которое проверяет, что a равно b и последняя буква строки c не равна 'B'
4️⃣
return F(a + 2, b, c + 'A') + F(a + 3, b, c + 'B') + F(a*2, b, c + 'C')
В противном случае возвращаем сумму результатов рекурсивных вызовов функции F с измененными параметрами: добавляем к a значения 2, 3 и умножаем его на 2, а к строке c добавляем 'A', 'B' и 'C' соответственно
5️⃣
print(F(3,20,''))
Вызываем функцию F с начальными аргументами 3, 20 и пустой строкой, затем выводим результат вызова
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Л. Шастин, Вариант 7 (2024)
Уровень: Средний
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых никакая гласная буква не стоит раньше согласной.
Примечание. Гласные буквы латинского алфавита: A, E, I, O, U, Y.
Аудио с пояснением к коду решения оставлю в комментариях.
s = open('24.txt').readline()
for x in 'AEIOUY':
s = s.replace(x, '* ')
print(max([len(x) for x in s.split()]))
# Ответ: 9052
1️⃣
s = open('24.txt').readline()
Считываем первую строку из файла '24.txt' и сохраняем ее в переменную s
2️⃣
for x in 'AEIOUY':
Начинаем цикл, который будет поочередно обрабатывать каждую букву из строки 'AEIOUY'
3️⃣
s = s.replace(x, '* ')
Заменяем каждую гласную букву x в строке s на комбинацию символов '* '
4️⃣
print(max([len(x) for x in s.split()]))
Разбиваем строку s по пробелам, находим длину каждого полученного фрагмента и выводим максимальную длину этих фрагментов
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: М. Ишимов
Уровень: Базовый
Сеть задана IP-адресом 119.124.96.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, двоичная запись которых оканчивается на 0?
from ipaddress import *
net = ip_network('119.124.96.0/255.255.240.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
# if s.endswith('0'):
if s[-1] == '0':
cnt += 1
print(cnt)
# Ответ: 2048
1️⃣
from ipaddress import *
Импортируем все классы и функции из модуля ipaddress, который обеспечивает удобную работу с IP-адресами и сетями
2️⃣
net = ip_network('119.124.96.0/255.255.240.0', 0)
Создаем объект сети net с заданным IP-адресом и маской подсети, указываем, что это IPv4 сеть с использованием маски в десятичном формате
3️⃣
cnt = 0
Инициализируем счетчик cnt, который будет хранить количество IP-адресов, удовлетворяющих определенному условию
4️⃣
for ip in net:
Начинаем цикл, который перебирает каждый IP-адрес в заданной сети net
5️⃣
s = f'{ip:b}'
Преобразуем текущий IP-адрес ip в двоичное строковое представление с помощью форматирования
6️⃣
# if s.endswith('0'):
Cтарая версию проверки, тоже работает.
7️⃣
if s[-1] == '0':
Проверяем, оканчивается ли двоичная строка s на '0', то есть является ли последний бит нулем
8️⃣
cnt += 1
Увеличиваем счетчик cnt на единицу, если последний бит IP-адреса равен нулю
9️⃣
print(cnt)
Выводим количество IP-адресов в сети net, у которых последний бит равен нулю
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Е.Джобс
Уровень: Средний
Автомат обрабатывает натуральное число N (0≤N≤255) по следующему алгоритму:
1) Строится восьми битная двоичная запись числа N.
2) Удаляются средние 4 цифры.
3) Полученное число переводится в десятичную запись и выводится на экран.
Какое наибольшее число, меньшее 110, после обработки автоматом даёт результат 7?
R = []
for n in range(0, 255+1):
s = f'{n:b}'.zfill(8)
s = s[:2] + s[-2:]
r = int(s, 2)
if n < 110 and r == 7:
R.append(n)
print(max(R))
# Ответ: 107
1️⃣
R = []
Создаем пустой список для хранения подходящих чисел
2️⃣
for n in range(0, 255+1):
Начинаем цикл, перебираем числа от 0 до 255 включительно
3️⃣
s = f'{n:b}'.zfill(8)
Переводим текущее число n в двоичную строку, дополняя нулями до 8 бит (в формате строки)
4️⃣
s = s[:2] + s[-2:]
Оставляем только первые две и последние две цифры двоичного представления
5️⃣
r = int(s, 2)
Преобразуем полученную строку обратно в целое число в десятичной системе счисления
6️⃣
if n < 110 and r == 7:
Проверяем, если число меньше 110 и преобразованное число равно 7
7️⃣
R.append(n)
Добавляем число в список R, если оно соответствует условиям
8️⃣
print(max(R))
Выводим наибольшее число из списка R
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Стоит ли добавить разборы основных прототипов? Хотя они уже представлены в шпаргалках 🤔
Anonymous Poll
69%
Да, конечно надо
20%
Смысла нет, можно улучшать шпаргалки
12%
Нет, для меня не актуально
Forwarded from Test ОГЭ | itpy 👨💻
Множества — это неупорядоченные коллекции уникальных элементов. Они полезны для хранения элементов без дублирования и для выполнения операций над множествами, таких как объединение, пересечение и разность. Давайте рассмотрим основы множеств в Python.
# Создание пустого множества
my_set = set()
# Создание множества с элементами
my_set = {1, 2, 3, 4, 5}
# Пример множества со строками
fruits = {"apple", "banana", "cherry"}
# Добавление элемента в множество
my_set.add(6)
print(my_set) # {1, 2, 3, 4, 5, 6}
# Удаление элемента из множества
my_set.remove(3)
print(my_set) # {1, 2, 4, 5, 6}
# Проверка наличия элемента в множестве
print(4 in my_set) # True
print(10 in my_set) # False
Множества в Python — мощный инструмент для работы с уникальными данными и выполнения различных операций над ними.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Множества в Python поддерживают множество операций, таких как объединение, пересечение, разность и симметрическая разность. Давайте рассмотрим их подробнее.
Объединение возвращает множество, содержащее все элементы обоих множеств.
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1.union(set2)
print(union_set) # {1, 2, 3, 4, 5}
Пересечение возвращает множество, содержащее только общие элементы обоих множеств.
intersection_set = set1.intersection(set2)
print(intersection_set) # {3}
Разность возвращает множество, содержащее элементы, которые есть в первом множестве, но отсутствуют во втором.
difference_set = set1.difference(set2)
print(difference_set) # {1, 2}
Симметрическая разность возвращает множество, содержащее элементы, которые присутствуют в одном из множеств, но не в обоих.
symmetric_difference_set = set1.symmetric_difference(set2)
print(symmetric_difference_set) # {1, 2, 4, 5}
Эти операции помогают эффективно работать с множествами и управлять уникальными данными.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Таким образом можно найти подсказку, исправить опечатку в своем коде, или найти вдохновение в чужом решении, чтобы написать более оптимальный код
Я настоятельно призываю вас делиться своими вариантами решений, даже если в задаче просто просят "оставить ответ"
P.S. 26-27 номера скоро будут добавлены
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Пересдача 04.07.2024
Уровень: Базовый
Все пятибуквенные слова, в составе которых могут быть только русские буквы Л, А, Й, М, записаны в алфавитном порядке и пронумерованы начиная с 1.
Вот начало списка:
1. ААААА
2. ААААЙ
3. ААААЛ
4. ААААМ
5. АААЙА
Под каким номером в списке идёт последнее слово, которое не содержит ни одной буквы М, ни одной буквы Л и не содержит букв Й стоящих рядом?
Простейшую вариацию решения этого номера опубликую в комментариях к этому посту. Делитесь своими решениями!
from itertools import *
R = []
for num, p in enumerate(product(sorted('ЛАЙМ'), repeat=5), 1):
word = ''.join(p)
if 'М' not in word and 'Л' not in word:
if 'ЙЙ' not in word:
R.append(num)
print(max(R))
# Ответ: 274
from itertools import *
Импортируем все функции из модуля itertools для работы с итераторами.
R = []
Инициализируем пустой список R для хранения номеров подходящих комбинаций.
for num, p in enumerate(product(sorted('ЛАЙМ'), repeat=5), 1):
Используем product для генерации всех возможных комбинаций 5 букв из слова 'ЛАЙМ', сортируем буквы и пронумеровываем их с 1.
word = ''.join(p)
Объединяем кортеж p в строку для получения текущего слова.
if 'М' not in word and 'Л' not in word:
Проверяем, что буквы 'М' и 'Л' отсутствуют в текущем слове.
if 'ЙЙ' not in word:
Проверяем, что двойная буква 'ЙЙ' отсутствует в текущем слове.
R.append(num)
Если условия выполнены, добавляем номер комбинации в список R.
print(max(R))
Выводим максимальный номер из списка R, который соответствует самой последней подходящей комбинации.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM