Информатика ЕГЭ | Илья Андрианов | itpy 🧑‍💻
1.12K subscribers
269 photos
22 videos
19 files
651 links
По рекламе: @ilandroxxy

Шпаргалки: clck.ru/3FwqWt
📚 Наши курсы: clck.ru/3FwqYb

Разборы: clck.ru/3Fwqay
💬 Чатик: clck.ru/3FwqZa

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
🚩 Разбор этого номера #yandex по информатике #ЕГЭ9
Автор: Богданов А
Уровень:
Сложный

🚩 Условие задачи:
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, для которых выполняются все условия:

в строке три числа повторяются ровно два раза;
эти три числа образуют стороны прямоугольного треугольника.
В ответе запишите одно число.


👩‍💻 Код решения:
cnt = 0
for s in open('9.csv'):
M = [int(x) for x in s.split(',')]
copied_2 = [x for x in M if M.count(x) == 2]
if len(copied_2) == 6:
a, b, c = sorted(set(copied_2))
if a**2 + b**2 == c**2:
cnt += 1
print(cnt)

Ответ: 148

👩‍💻 Файлы для решения задачи: 9.csv

👩‍💻 Комментарии к коду:

1⃣ cnt = 0
- Создаем счетчик cnt и инициализируем его нулем. Он будет считать количество строк, удовлетворяющих условиям.


2⃣ for s in open('9.csv'):
- Открываем файл 9.csv и построчно читаем его. Каждая строка сохраняется в переменную s.


3⃣ M = [int(x) for x in s.split(',')]
- Разбиваем строку s по запятым, преобразуем каждый элемент в целое число и сохраняем в список M.


4⃣ copied_2 = [x for x in M if M.count(x) == 2]
- Создаем список copied_2, содержащий элементы из M, которые встречаются ровно 2 раза.


5⃣ if len(copied_2) == 6:
- Проверяем, что в списке copied_2 ровно 6 элементов (то есть 3 пары одинаковых чисел).


6⃣ a, b, c = sorted(set(copied_2))
- Удаляем дубликаты из copied_2 (оставляем уникальные значения), сортируем их и присваиваем переменным a, b, c.


7⃣ if a**2 + b**2 == c**2:
- Проверяем, выполняется ли теорема Пифагора для полученных чисел (являются ли они пифагоровой тройкой).


8⃣ cnt += 1
- Если все условия выполнены, увеличиваем счетчик cnt на 1.


0⃣ print(cnt)
- После обработки всех строк выводим значение счетчика cnt.


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥65🔥4
🚀 Почему нельзя использовать is для сравнения строк и чисел в Python? #tpy

💻 is - это оператор идентичности, он проверяет, ссылаются ли переменные на один и тот же объект в памяти. А == - оператор равенства, сравнивает значения.

🔍 Для небольших чисел и коротких строк Python часто использует кэш, поэтому is может иногда возвращать True.
Но для больших чисел или длинных строк это не гарантировано - объекты могут быть разными.


Пример с кодом:
a = 256
b = 256
print(a is b) # True (кэш)

x = "hello"
y = "hello"
print(x is y) # True (кэш)

a = 1000
b = 1000
print(a is b) # False (разные объекты)


⚠️ Используйте == для сравнения значений, is - только чтобы проверить, ссылаются ли переменные на один объект!

#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥53🔥3
🚩🚩 Разбор этого номера #yandex по информатике #ЕГЭ25
Автор: Джобс Е.
Уровень:
Базовый

🚩 Условие задачи:
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [106732567; 152673836] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе само число и его наибольший нетривиальный делитель. Найденные числа расположите в порядке возрастания.

Например, для числа 2018 имеем следующие делители 2 и 1009. Поэтому результатом (не принимая во внимание количества делителей) будет пара чисел 2018 1009.


👩‍💻 Код решения:
def divisors(x):
div = []
for j in range(2, int(x**0.5)+1):
if x % j == 0:
div.append(j)
div.append(x // j)
return sorted(set(div))


for x in range(106732567, 152673836+1):
if (x**0.5).is_integer():
d = divisors(x)
if len(d) == 3:
print(x, max(d))

Ответ:
112550881 1092727
131079601 1225043
141158161 1295029


👩‍💻 Комментарии к коду:

1⃣ def divisors(x):
- Объявление функции divisors, которая принимает число x и возвращает его делители.


2⃣ div = []
- Создание пустого списка div для хранения делителей.


3⃣ for j in range(2, int(x**0.5)+1):
- Цикл по возможным делителям от 2 до квадратного корня из x (включительно).


4⃣ if x % j == 0:
- Проверка, делится ли x на j без остатка.


5⃣ div.append(j)
- Если j - делитель, добавляем его в список.


6⃣ div.append(x // j)
- Добавляем парный делитель (x разделить на j).


7⃣ return sorted(set(div))
- Возвращаем отсортированный список уникальных делителей.


8⃣ for x in range(106732567, 152673836+1):
- Основной цикл по числам от 106732567 до 152673836 включительно.


0⃣ if (x**0.5).is_integer():
- Проверка, является ли x полным квадратом (квадратный корень - целое число).


🔟 d = divisors(x)
- Если x - полный квадрат, находим все его делители.


1⃣1⃣ if len(d) == 3:
- Проверяем, что у числа ровно 3 делителя (не считая 1 и само число).


1⃣2⃣ print(x, max(d))
- Если условие выполняется, выводим число и его наибольший делитель.


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥2🔥1
📎 Что такое файл .env, и зачем он нужен? #tpy

Если вы когда-либо работали с проектами на Python, Node.js или других языках, то, скорее всего, сталкивались с файлами .env. Но что они из себя представляют?

Файл .env - это секретный шкафчик для хранения переменных окружения!
В нем хранятся важные настройки: ключи API, пароли, настройки базы данных и другие конфиденциальные данные.


🔒 Почему это удобно?
- Безопасность: секретные данные не хранятся прямо в коде, их легко исключить из системы контроля версий.
- Гибкость: можно легко менять настройки между разными окружениями - тестовым, продакшеном и локальной разработкой.
- Удобство: все важные переменные сосредоточены в одном месте, их легко найти и обновить.


🚀 .env - это безопасный способ хранения конфиденциальной информации, если он используется локально и не попадает в публичные источники.
⚠️ Ведь его публичное размещение - серьёзная уязвимость!


#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
24❤‍🔥2🔥2
🚩 Разбор номера 17799 #kege по информатике #ЕГЭ8
Автор: В. Зарянкин
Уровень:
Средний

🚩 Условие задачи:
Все четырёхбуквенные слова, в составе которых могут быть только русские буквы А, Р, Г, У, М, Е, Н, Т, записаны в алфавитном порядке и пронумерованы начиная с 1.
Вот начало списка:

1. АААА
2. АААГ
3. АААЕ
4. АААМ
5. АААН
...

Под каким номером в списке идёт последнее слово, в котором все буквы различны и все символы располагаются в алфавитном порядке?



👩‍💻 Код решения:
from itertools import *
s = sorted('АРГУМЕНТ')
for n, p in enumerate(product(s, repeat=4), 1):
word = ''.join(p)
if len(word) == len(set(word)):
if list(word) == sorted(word):
print(n)

Ответ: 2424

👩‍💻 Комментарии к коду:

1⃣ from itertools import *
- Импорт всех функций из модуля itertools (в данном случае используется product)


2⃣ s = sorted('АРГУМЕНТ')
- Создание отсортированного списка букв из слова "АРГУМЕНТ": ['А', 'Г', 'Е', 'М', 'Н', 'Р', 'Т', 'У']


3⃣ for n, p in enumerate(product(s, repeat=4), 1):
- Цикл по всем возможным комбинациям букв длиной 4 (с повторами)
- product(s, repeat=4) генерирует декартово произведение списка s на себя 4 раза
- enumerate добавляет нумерацию, начиная с 1


4⃣ word = ''.join(p)
- Объединение кортежа p в строку (слово из 4 букв)


5⃣ if len(word) == len(set(word)):
- Проверка, что все буквы в слове уникальны (длина слова равна длине множества его букв)


6⃣ if list(word) == sorted(word):
- Проверка, что буквы в слове идут в алфавитном порядке (слово равно своему отсортированному варианту)


7⃣ print(n)
- Если оба условия выполнены, выводится номер текущей комбинации


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3👍21
📂 Как открывать файлы в Python на ЕГЭ? #tpy
Примеры кодов для задач 9, 17, 24, 26, 27 из ЕГЭ:


0⃣
for M in open('9.txt'):
M = [int(i) for i in M.split()]
print(M)

▶️ Читаем файл построчно, каждую строку разбиваем на числа и сразу печатаем.


1⃣7⃣
M = [int(i) for i in open('17.txt')]
print(M)

▶️ Читаем все строки файла и превращаем в список чисел.


2⃣4⃣
s = open('24.txt').readline()

Считываем только первую строку файла.


2⃣6⃣
ans = []
for M in open('26.txt'):
M = [int(i) for i in M.split()]
ans.append(M)

Сохраняем каждую строку как список чисел, а потом собираем всё в общий список.


2⃣7⃣
f = open('27.А.txt').readlines()[1:]
for M in f:
M = [float(i.replace(',','.')) for i in M.split()]
x, y = M[0], M[1]
print(x, y)

▶️ Пропускаем первую строку, заменяем запятые на точки и превращаем в числа с плавающей точкой.


#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍53🔥3❤‍🔥2
🚩 Разбор этого номера #yandex по информатике #ЕГЭ9
Автор: Яндекс учебник
Уровень: Средний


🚩 Условие задачи:
Определите количество строк таблицы, содержащих числа, для которых выполнены все условия:

1. Четыре числа строки можно разбить на две пары чисел с равными суммами

2. Максимальное число строки меньше суммы трёх оставшихся чисел сумма чисел в строке чётна



👩‍💻 Код решения:
from itertools import permutations
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
if sum(M) % 2 == 0:
if max(M) < sum(M) - max(M):
if any(p[0] + p[1] == p[2] + p[3] for p in permutations(M)):
cnt += 1
print(cnt)

Ответ: 139


👩‍💻 Комментарии к коду:


1⃣ from itertools import permutations
· Импортируем функцию permutations для генерации всех перестановок


2⃣ cnt = 0
· Создаем счетчик и инициализируем его нулем


3⃣ for s in open('0. files/9.csv'):
· Открываем файл '9.csv' и построчно читаем его


4⃣ M = [int(x) for x in s.split(';')]
· Разбиваем строку по символу ';' и преобразуем каждый элемент в целое число


5⃣ if sum(M) % 2 == 0:
· Проверяем, что сумма всех чисел в строке четная


6⃣ if max(M) < sum(M) - max(M):
· Проверяем, что максимальное число меньше суммы всех остальных чисел


7⃣ if any(p[0] + p[1] == p[2] + p[3] for p in permutations(M)):
· Проверяем, существует ли такая перестановка 4 чисел, где сумма первых двух равна сумме последних двух


8⃣ cnt += 1
· Если все три условия выполнены, увеличиваем счетчик на 1


0⃣ print(cnt)
· Выводим итоговое количество строк, удовлетворяющих всем условиям


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4🔥2
🚀 Типы данных в Python, которые считаются структурами данных #tpy

🔍- Это те типы, которые позволяют хранить и организовывать коллекции элементов.

👩‍💻 Основные структуры данных в Python:
📎 list - это изменяемый упорядоченный список. Можно добавлять, удалять, менять элементы. Например:
fruits = ['яблоко', 'банан', 'апельсин'] 📎

📎 tuple - неизменяемая последовательность. Отлично подходит, когда нужно зафиксировать набор данных:
coordinates = (10, 20) 📎

📎 set - множество уникальных элементов. Быстро искать, удалять дубликаты:
unique_numbers = {1, 2, 3} 📎

📎 dict - словарь, отображение ключей на значения. Очень удобно для хранения пар "ключ-значение":
person = {'имя': 'Анна', 'возраст': 25} 📎

❄️ frozenset - неизменяемое множество, его нельзя менять после создания. Используется там, где нужен "жёсткий" набор данных. frozenset([1, 2, 3, 4]) ➡️ frozenset({1, 2, 3, 4})

🔼🔽 deque - двусторонняя очередь из модуля collections. Быстро добавлять и удалять элементы с обоих концов:
from collections import deque ⚙️ d = deque() - инициализировать элементами из любого итерируемого объекта (список, кортеж и т. д.).


Технологии телеграмма не стоят на месте, поэтому обращаю ваше внимание, что мы часто используем инструмент "цитата". Кликайте на цитату выше, чтобы открыть текст для чтения 👆

#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥3🔥2
🚩 Разбор номера 22271 #КЕГЭ по информатике #ЕГЭ5
Автор: О. Лысенков
Уровень: Средний


🚩 Условие задачи:
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1. Строится восьмеричная запись числа N.

2. Далее эта запись обрабатывается по следующему правилу:

а) если восьмеричная запись начинается на 5, то все двойки в записи меняются на единицы, а все единицы меняются на двойки после к числу приписывается 11 слева;

б) если восьмеричная запись начинается не на 5, то к записи справа приписывается 10, а первый разряд полученной записи заменяется на 2.


Укажите максимальное число N, для которого результатом работы алгоритма является наибольшее число R, меньшее 1354.



👩‍💻 Код решения:
L = []
for n in range(1, 10000):
s = f'{n:o}' # s = oct(n)[2:]
if s[0] == '5':
s = s.replace('2', '*')
s = s.replace('1', '2')
s = s.replace('*', '1')
s = '11' + s
else:
s = s + '10'
s = '2' + s[1:] # а первый разряд полученной записи заменяется на 2.
r = int(s, 8)
if r < 1354:
L.append((r, n))
print(max(L))

Ответ: 61


👩‍💻 Комментарии к коду:


1⃣ L = []
· Создаем пустой список для хранения пар (результат, исходное число)


2⃣ for n in range(1, 10000):
· Перебираем числа n от 1 до 9999


3⃣ s = f'{n:o}' # s = oct(n)[2:]
· Преобразуем число n в восьмеричную систему счисления (без префикса '0o')


4⃣ if s[0] == '5':
· Проверяем, начинается ли восьмеричная запись с цифры 5


5⃣ s = s.replace('2', '*')
· Временно заменяем все цифры 2 на символ '*' (чтобы избежать конфликта при следующих заменах)


6⃣ s = s.replace('1', '2')
· Заменяем все цифры 1 на 2


7⃣ s = s.replace('*', '1')
· Заменяем временные символы '*' обратно на 1 (фактически меняем местами 1 и 2)


8⃣ s = '11' + s
· Добавляем в начало строки две единицы '11'


0⃣ else:
· Если восьмеричная запись НЕ начинается с 5


🔟 s = s + '10'
· Добавляем в конец строки '10'


1⃣1⃣ s = '2' + s[1:] # а первый разряд полученной записи заменяется на 2.
· Заменяем первую цифру полученной строки на 2


1⃣2⃣ r = int(s, 8)
· Преобразуем полученную строку s обратно в десятичное число, интерпретируя ее как восьмеричную


1⃣3⃣ if r < 1354:
· Проверяем, что результат r меньше 1354


1⃣4⃣ L.append((r, n))
· Добавляем в список пару (результат r, исходное число n)


1⃣5⃣ print(max(L))
· Находим и выводим максимальную пару в списке (сравнение происходит сначала по r, затем по n)



#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤‍🔥33🔥1
🚀 Что такое zip() в Python? #tpy

🪄 Это встроенная функция, которая позволяет объединить несколько итерируемых объектов (например, списки или кортежи) в один, создавая последовательность кортежей, где каждый из них содержит элементы, расположенные на одинаковых позициях.

↗️ если проще, то:
Она берет по одному элементу из каждого итерируемого объекта и создает кортеж из них.


💻 Пример с кодом:
names = ['Анна', 'Борис']
scores = [85, 90]

result = list(zip(names, scores))
print(result)


👩‍💻 Вывод:
[('Анна', 85), ('Борис', 90)]


📎 Особенности:
- Можно объединять любое количество итерируемых объектов.
- Если длины объектов отличаются, zip() остановится на минимальной длине.

🔥 Полезно для:
- параллельной обработки списков,
- создания словарей,
- объединения данных и многого другого.

#⃣ Вся теория для ЕГЭ в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤‍🔥22🔥1
🚩🚩 Разбор номера 23282 #КЕГЭ по информатике #ЕГЭ25
Автор: Основная волна 11.06.25
Уровень: Средний


🚩 Условие задачи:
Пусть М - сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа.

Напишите программу, которая перебирает целые числа, большие 5 400 000, в порядке возрастания и ищет среди них такие, для которых М больше 60 000 и является палиндромом, т.е. одинаково читается слева направо и справа налево.

В ответе запишите в первом столбце
таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце - соответствующие им значения М.


👩‍💻 Код решения:
def prime(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 d(x):
a=[]
for i in range(2, int(x**0.5)+1):
if x%i==0:
a+=[i, x//i]
return sorted(set(a))
k=0
for i in range(5400001, 10**10):
a=[j for j in d(i) if prime(j) == True]
if len(a)>0:
M=min(a)+max(a)
if M>60000:
if str(M)[::-1] == str(M):
print(i, M)
k += 1
if k==5:
break

Ответ:
5400042 900009
5400420 90009
5400866 158851
5406116 1351531
5406420 90109



👩‍💻 Комментарии к коду:


1⃣ def prime(x):
· Объявление функции для проверки, является ли число простым


2⃣ if x <= 1:
· Проверяем, если число меньше или равно 1


3⃣ return False
· Числа ≤ 1 не являются простыми


4⃣ for i in range(2, int(x**0.5)+1):
· Перебираем возможные делители от 2 до квадратного корня из x


5⃣ if x % i == 0:
· Проверяем, делится ли x на i без остатка


6⃣ return False
· Если нашли делитель, число не простое


7⃣ return True
· Если делителей не найдено, число простое


8⃣ def d(x):
· Объявление функции для нахождения всех делителей числа x


0⃣ a=[]
· Создаем пустой список для делителей


🔟 for i in range(2, int(x**0.5)+1):
· Перебираем числа от 2 до квадратного корня из x


1⃣1⃣ if x%i==0:
· Проверяем, является ли i делителем x


1⃣2⃣ a+=[i, x//i]
· Добавляем в список сам делитель i и парный ему делитель x//i


1⃣3⃣ return sorted(set(a))
· Возвращаем отсортированный список уникальных делителей


1⃣4⃣ k=0
· Счетчик найденных чисел


1⃣5⃣ for i in range(5400001, 10**10):
· Бесконечный цикл начиная с 5 400 001


1⃣6⃣ a=[j for j in d(i) if prime(j) == True]
· Создаем список простых делителей числа i


1⃣7⃣ if len(a)>0:
· Проверяем, что есть хотя бы один простой делитель


1⃣8⃣ M=min(a)+max(a)
· Вычисляем M как сумму минимального и максимального простого делителя


1⃣0⃣ if M>60000:
· Проверяем, что M больше 60 000


2⃣0⃣ if str(M)[::-1] == str(M):
· Проверяем, является ли M палиндромом (читается одинаково в обе стороны)


2⃣1⃣ print(i, M)
· Выводим число i и значение M


2⃣2⃣ k += 1
· Увеличиваем счетчик найденных чисел


2⃣3⃣ if k==5:
· Проверяем, найдено ли уже 5 чисел


2⃣4⃣ break
· Прерываем цикл после нахождения 5 подходящих чисел


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3🔥1