Информатика ЕГЭ | Илья Андрианов | itpy 🧑‍💻
1.11K subscribers
270 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
🚩 Разбор номера 15413 #kege по информатике #ЕГЭ8
Автор: А.Вдовин
Уровень:
Средней

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

Примечание: если слева или справа от 8 цифр нет, то сумма считается равной нулю


🚩 Теоретическая справка:
Аудио с пояснением к коду решения оставлю в комментариях.


👩‍💻 Код решения:
from itertools import *
cnt = 0
for p in product('012345678', repeat=4):
num = ''.join(p)
if num[0] != '0':
if num.count('8') == 1:
i = num.index('8')
summa_left = sum(map(int, num[:i]))
summa_right = sum(map(int, num[i+1:]))
if summa_left == summa_right:
cnt += 1
print(cnt)

Ответ: 64


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

1⃣ from itertools import *
Импорт всех функций из модуля itertools, который предоставляет удобные инструменты для работы с итераторами


2⃣ cnt = 0
Инициализация счётчика cnt, который будет хранить количество подходящих чисел


3⃣ for p in product('012345678', repeat=4):
Цикл по всем возможным комбинациям длиной 4 из цифр '012345678' (включая повторы)


4⃣ num = ''.join(p)
Преобразование текущей комбинации p в строку num


5⃣ if num[0] != '0':
Проверка, что число не начинается с нуля (чтобы избежать ведущих нулей)


6⃣ if num.count('8') == 1:
Проверка, что в числе ровно одна цифра '8'


7⃣ i = num.index('8')
Нахождение индекса цифры '8' в строке num


8⃣ summa_left = sum(map(int, num[:i]))
Вычисление суммы цифр слева от '8' (преобразование среза строки в числа и их суммирование)


0⃣ summa_right = sum(map(int, num[i+1:]))
Вычисление суммы цифр справа от '8'


🔟 if summa_left == summa_right:
Проверка равенства сумм слева и справа от '8'


1⃣1⃣ cnt += 1
Увеличение счётчика, если условие выполнено


1⃣2⃣ print(cnt)
Вывод итогового количества подходящих чисел


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍53❤‍🔥3
🚩 Разбор номера 7029 #kege по информатике #ЕГЭ8
Автор: А.Богданов
Уровень: Базовый


🚩 Условие задачи:
Марина собирает восьмибуквенные слова из букв своего имени. Все буквы могут многократно повторяться. На каком месте окажется имя МАРИАННА в отсортированном по алфавиту списке сгенерированных слов? Нумерация начинается с 1.


🚩 Теоретическая справка:
Аудио с пояснением к коду решения оставлю в комментариях.


👩‍💻 Код решения:
from itertools import *

for n, p in enumerate(product(sorted('МАРИН'), repeat=8), 1):
word = ''.join(p)
if word == 'МАРИАННА':
print(n)
break

Ответ: 169466


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

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


2⃣ for n, p in enumerate(product(sorted('МАРИН'), repeat=8), 1):
Запуск цикла, где:

• sorted('МАРИН') сортирует символы строки 'МАРИН' в алфавитном порядке (['А', 'И', 'М', 'Н', 'Р'])

• product(..., repeat=8) генерирует все возможные комбинации длины 8 из этих символов

• enumerate(..., 1) нумерует каждую комбинацию, начиная с 1

• n хранит номер текущей комбинации, p — саму комбинацию в виде кортежа символов


3⃣ word = ''.join(p)
Преобразует кортеж символов p в строку word


4⃣ if word == 'МАРИАННА':
Проверяет, совпадает ли текущая комбинация word с искомым словом 'МАРИАННА'


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


6⃣ break
Прерывает цикл после нахождения нужного слова


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
4❤‍🔥9👍44
1⃣6⃣ Шпаргалка для номера #ЕГЭ16 #шпора

Собрал для вас основные моменты, которые важно знать при решении 16 номера. Для закрепления материала оставляю ссылку на подборку всех 16 номеров разобранных на моем канале.

📚 По этой ссылке ты найдешь мои шпаргалки по всем остальным номерам ЕГЭ


🚩🚩 Разбор номера 21902 #kege по информатике #ЕГЭ16
Автор: Открытый вариант 2025
Уровень: Базовый

def F(n):
if n >= 2025:
return n
if n < 2025:
return n * 2 + F(n + 2)

print(F(82) - F(81)) # 1945




🚩🚩 Разбор номера 21415 #kege по информатике #ЕГЭ16
Автор: Досрочная волна 2025
Уровень: Базовый

import sys
sys.setrecursionlimit(100000)

def F(n):
if n <= 5:
return 1
if n > 5:
return n + F(n - 2)

print(F(2126) - F(2122))

В этом прототипе нужно расширить глубину рекурсии из-за ошибки: "RecursionError: maximum recursion depth exceeded".



🚩🚩 Разбор номера 20906 #kege по информатике #ЕГЭ16
Автор: Апробация 05.03.25
Уровень: Базовый

import sys
sys.setrecursionlimit(100000)

def F(n):
if n == 1:
return 1
if n > 1:
return n * F(n - 1)

print((F(2024) // 4 + F(2023)) // F(2022))

print((F(2024) / 4 + F(2023)) // F(2022))
~~~^~~
OverflowError: integer division result too large for a float

Такую ошибку мы получили на экзамене 2024 года.



🚩🚩 Разбор номера 18931 #kege по информатике #ЕГЭ16
Автор: М. Попков
Уровень: Базовый

from functools import *
import sys
sys.setrecursionlimit(100000)

@lru_cache(None)
def F(n):
if n <= 3:
return n - 1
if n > 3 and n % 2 == 0:
return F(n - 2) + n / 2 - F(n - 4)
if n > 3 and n % 2 != 0:
return F(n - 1) * n + F(n - 2)


for n in range(1, 5000):
F(n)

print(F(4952) + 2 * F(4958) + F(4964))

Самая неприятная ошибка, здесь необходимо использовать библиотеку functools.


📌 Тут оставлю сылку на старую версию шпаргалки, которую делал в Notion


#⃣ Вся теория для ЕГЭ в одном месте
#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥1810❤‍🔥82
5⃣ Шпаргалка для номера #ЕГЭ5 #шпора

Собрал для вас основные моменты, которые важно знать при решении 5 номера. Для закрепления материала оставляю ссылку на подборку всех 5 номеров разобранных на моем канале.

📚 По этой ссылке ты найдешь мои шпаргалки по всем остальным номерам ЕГЭ


🚩 Разбор номера 21404 #kege по информатике #ЕГЭ5
Автор: Досрочная волна 2025
Уровень: Базовый

for n in range(1, 1000):
s = f'{n:b}'
if s.count('1') % 2 == 0:
s = '10' + s[2:] + '0'
else:
s = '11' + s[2:] + '1'
r = int(s, 2)
if r > 480:
print(n)
break



🚩 Разбор номера 21700 #kege по информатике #ЕГЭ5
Автор: ЕГКР 19.04.25
Уровень: Базовый

def tri(n):
s = ''
while n > 0:
s += str(n % 3)
n //= 3
s = s[::-1]
return s

for n in range(1000, 1, -1):
s = tri(n)
if n % 3 == 0:
s += s[-2:]
else:
s += tri(n % 3 * 3)
r = int(s, 3)
if r <= 150:
print(n)
break

В этом типе нужно использовать функцию для перевода в троичную систему счисления.


🚩 Встроенные функции перевода в 2, 8, 16-ю системы счисления:
n = 24
num_2 = bin(n)[2:] # 11000
num_8 = oct(n)[2:] # 30
num_16 = hex(n)[2:] # 18


🚩 Перевод в 2, 8, 16-ю системы счисления через f-строки:
n = 24
num_2 = f'{n:b}' # 11000
num_8 = f'{n:o}' # 30
num_16 = f'{n:x}' # 18


🚩 Универсальная функция перевода (2 <= base <=36)
from string import *
alphabet = digits + ascii_uppercase
# alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')

def my_convert(num, base):
result = ''
while num > 0:
result += alphabet[num % base]
num //= base
return result[::-1]

n = 24
num_2 = my_convert(n, 2) # 11000
num_8 = my_convert(n, 8) # 30
num_16 = my_convert(n, 16) # 18
num_3 = my_convert(n, 3) # 220


🚩 Функция перевода из base системы в 10-ю
print(int('1000', 2))  # 8
print(int('10', 8)) # 8
print(int('8', 16)) # 8

Диапазон работы функции (2 <= base <= 36)


🚩 Действия над строками:
s = '101001'

# Добавить '10' справа (в конец)
s = s + '10' # 10100110


# Добавить '01' слева (в начало)
s = '01' + s # 0110100110
print(s)

# Добавить '+' по середине
s = s[:len(s)//2] + '+' + s[len(s)//2:]
# 01101*00110

# Заменить все нули на единицы, а единицы на нули
s = s.replace('1', '*')
s = s.replace('0', '1')
s = s.replace('*', '0')


📌 Тут оставлю сылку на старую версию шпаргалки, которую делал в Notion


Давайте наберем 30 реакций, после этого заливаю следующую (свежую) шпору 👋

#⃣ Вся теория для ЕГЭ в одном месте
#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
5168👍74
8⃣ Шпаргалка для номера #ЕГЭ8 #шпора

Собрал для вас основные моменты, которые важно знать при решении 8 номера. Для закрепления материала оставляю ссылку на подборку всех 8 номеров разобранных на моем канале.

📚 По этой ссылке ты найдешь мои шпаргалки по всем остальным номерам ЕГЭ


🚩 Разбор номера 21407 #kege по информатике #ЕГЭ8
Автор: Досрочная волна 2025
Уровень: Базовый

from itertools import *

k = 0
for i in product('ДГИАШЭ', repeat=5):
i = ''.join(i)
if i[0] not in 'ИАЭ' and i[-1] not in 'ДГШ':
k += 1
print(k)

В данном задании необходимо найти какое количество различных кодовых слов можно составить.


🚩 Разбор номера 21894 #kege по информатике #ЕГЭ8
Автор: Открытый вариант 2025
Уровень: Базовый

from itertools import *

k = 0
for i in permutations('0123456789', 4):
i = ''.join(i)
if i[0] != '0':
i = i.replace('0', '2').replace('4', '2').replace('6', '2').replace('8', '2')
i = i.replace('3', '1').replace('5', '1').replace('7', '1').replace('9', '1')
if '11' not in i and '22' not in i:
k += 1
print(k)

В данном прототипе нужно найти количество чисел, которые можно составить.


🚩 Разбор номера 21703 #kege по информатике #ЕГЭ8
Автор: ЕГКР 19.04.25
Уровень: Базовый

from itertools import *

number = 0
for i in product(sorted('ПОБЕДА'), repeat=6):
i = ''.join(i)
number += 1
if i[0] == 'О' and len(i) == len(set(i)):
if number % 2 == 0:
print(number)

Здесь нужно учесть исходный список слов и вывести номер подходящего слова.

📌 Тут оставлю сылку на старую версию шпаргалки, которую делал в Notion



✔️ Супер! 30 реакций собрали, тогда на этом посте собираем 35 и идем дальше?)


#⃣ Вся теория для ЕГЭ в одном месте
#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
7❤‍🔥2611🔥822
1⃣2⃣Шпаргалка для номера #ЕГЭ12 #шпора

Для закрепления материала оставляю ссылку на подборку всех 12 номеров разобранных на моем канале.

📚 По этой ссылке ты найдешь мои шпаргалки по всем остальным номерам ЕГЭ


🚩🚩 Разбор номера 20901 #kege по информатике #ЕГЭ12
Автор: Апробация 05.03.25
Уровень: Базовый

s = '1' + 90 * '0'
while '1' in s:
if '10' in s:
s = s.replace('10', '0001', 1)
else:
s = s.replace('1', '000', 1)
print(s.count('0'))

В данном задании необходимо найти количество нулей в полученной строке.


🚩🚩 Разбор номера 20958 #kege по информатике #ЕГЭ12
Уровень: Базовый

M = []
for n in range(4, 10000):
s = '4' + n * '7'
while '444' in s or '777' in s:
if '777' in s:
s = s.replace('777', '4', 1)
else:
s = s.replace('444', '7', 1)
summ = s.count('4') * 4 + s.count('7') * 7
M.append(summ)
print(max(M))

В этом прототипе нужно найти максимальную сумму цифр в строке.


🚩 Оставляю короткую заметку по поиску суммы цифр в строке:
s = '12345'

summ = s.count('4') * 4 + s.count('7') * 7

summ = sum(map(int, s))

summ = sum([int(x) for x in s])

summ = sum([int(x) for x in s if x.isdigit()])

summ = 0
for x in s:
summ += int(x)

💪 Более подробный пост на эту тему публиковал выше 🔝

📌 Тут оставлю сылку на старую версию шпаргалки, которую делал в Notion


По традиции набираем 35+ реакций и вечером заливаю ряд постов про 27 номер!


#⃣ Вся теория для ЕГЭ в одном месте
#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
10❤‍🔥10👍44🔥21
2⃣7⃣ Разбор / Шпаргалка номера #ЕГЭ27
Задача 21425
#kege по информатике #шпора
Автор: Досрочная волна 2025
Уровень: Базовый


PS: Для начала просто внимательно прочитайте условие задачи и сравните его с оригиналом! Также публикую код решения, но пока без комментариев - они будут добавлены постами ниже.

❗️Продолжение разбора 27 номера будет в нескольких постах ниже.

🚩 Условие задачи:
В файле A хранятся данные о звёздах двух кластеров. В файле B хранятся данные о звёздах трёх кластеров.

Для каждого файла определите координаты центра каждого кластера. Затем вычислите четыре числа:
1. PxA – среднее арифметическое абсцисс центров кластеров файла А.
2. PyA – среднее арифметическое ординат центров кластеров файла А.

3. PxB – среднее арифметическое абсцисс центров кластеров файла B.
4. PyB – среднее арифметическое ординат центров кластеров файла B.


В ответе запишите четыре числа: в первой строке сначала целую часть произведения PxA * 10000, затем целую часть произведения Py*10000 для файла А, во второй строке – аналогичные данные для файла B.


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

А расстояние между двумя точками на плоскости между точками A(x1, y1) и B(x2, y2) вычисляется по формуле: d(A,B)= ((x2 - x1)**2 + (y2 - y1)**2)**0.5



👩‍💻 Код решения:
from math import dist
clustersA = [[], []]
clustersB = [[], [], []]

for s in open('27_A.txt'):
s = s.replace(',', '.')
x, y = [float(i) for i in s.split()]
if y > 0:
clustersA[0].append([x, y])
else:
clustersA[1].append([x, y])


for s in open('27_B.txt'):
s = s.replace(',', '.')
x, y = [float(i) for i in s.split()]
if x > 0 and y > 0:
clustersB[0].append([x, y])
elif x > 0 and y < 0:
clustersB[1].append([x, y])
else:
clustersB[2].append([x, y])


def center(cl):
R = []
for p in cl:
summa=sum(dist(p, g) for g in cl)
R.append([summa,p])
return min(R)[1]


centersA = [center(cl) for cl in clustersA]
pxA = sum(x for x, y in centersA) / 2 * 10000
pyA = sum(y for x, y in centersA) / 2 * 10000
print(int(pxA), int(pyA))

centersB = [center(cl) for cl in clustersB]
pxB = sum(x for x, y in centersB) / 3 * 10000
pyB = sum(y for x, y in centersB) / 3 * 10000
print(int(pxB), int(pyB))

Ответ:
167990 73043
122627 29105

Файлы для решения задачи:
27_A.xlsx 27_A.txt
27_B.xlsx 27_B.txt


#⃣ Полный список разборов в одном месте
#⃣ Шпаргалки по всем остальным номерам ЕГЭ

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥10🔥54🤯2
🚩🚩 Разбор номера 18445 #kege по информатике #ЕГЭ13
Автор: Сергей Горбачев
Уровень: Средний


🚩 Условие задачи:
Сеть задана IP-адресом 140.116.194.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, в двоичной записи которых каждый из четырёх байтов оканчивается нулём?


👩‍💻 Код решения:
from ipaddress import *
net = ip_network('140.116.194.0/255.255.240.0', 0)
cnt = 0
for ip in net:
b = f'{ip:b}'
if b[:8][-1] == '0':
if b[8:16][-1] == '0':
if b[16:24][-1] == '0':
if b[24:][-1] == '0':
cnt += 1
print(cnt)

Ответ: 1024

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

1⃣ from ipaddress import *
• Импортируются все классы и функции из модуля ipaddress, используемого для работы с IP-адресами и сетями.


2⃣ net = ip_network('140.116.194.0/255.255.240.0', 0)
• Создаётся объект сети net с заданным IP-адресом и маской. Аргумент 0 указывает, что используется маска, а не префикс.


3⃣ cnt = 0
• Инициализируется счётчик для подсчёта подходящих IP-адресов.


4⃣ for ip in net:
• Цикл перебирает все IP-адреса в заданной сети.


5⃣ b = f'{ip:b}'
• Преобразует IP-адрес в строку его двоичного представления (без точек и пробелов).


6⃣ if b[:8][-1] == '0':
• Проверяет, оканчивается ли первый байт (первые 8 бит) на 0.


7⃣ if b[8:16][-1] == '0':
• Проверяет, оканчивается ли второй байт (биты с 8 по 15) на 0.


8⃣ if b[16:24][-1] == '0':
• Проверяет, оканчивается ли третий байт (биты с 16 по 23) на 0.


0⃣ if b[24:][-1] == '0':
• Проверяет, оканчивается ли четвёртый байт (биты с 24 по 31) на 0.


1⃣0⃣ cnt += 1
• Увеличивает счётчик, если все четыре байта оканчиваются нулём.


1⃣1⃣ print(cnt)
• Выводит количество IP-адресов, удовлетворяющих условию задачи.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥6👍32🔥2
🚩 Разбор номера 18258 #kege по информатике #ЕГЭ9
Автор: Л.Шастин
Уровень:
Сложный

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


👩‍💻 Код решения:
R = []
for n, s in enumerate(open('0. files/9.csv'), 1):
M = [int(x) for x in s.split(';')]
if M == sorted(M):
if any(M.count(x) > 1 and sum(map(int, str(x))) % 2 == 0 for x in M):
R.append(n)
print(max(R))

Ответ: 6937


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

1⃣ R = []
Создается пустой список R, в который будут добавляться номера строк, удовлетворяющих условиям


2⃣ for n, s in enumerate(open('0. files/9.csv'), 1):
Открывается файл 9.csv, итерируемся по его строкам s с нумерацией n, начиная с 1


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


4⃣ if M == sorted(M):
Проверяется, равен ли список M своему отсортированному варианту (проверка на неубывающую последовательность)


5⃣ if any(M.count(x) > 1 and sum(map(int, str(x))) % 2 == 0 for x in M):
Проверяется, есть ли в списке M хотя бы одно число x, которое встречается больше одного раза (M.count(x) > 1) и сумма цифр которого четная (sum(map(int, str(x))) % 2 == 0)


6⃣ R.append(n)
Если оба условия выполнены, номер строки n добавляется в список R


7⃣ print(max(R))
Выводится максимальный номер строки из списка R (последняя подходящая строка в файле)


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
38❤‍🔥4🔥4
🚩🚩Разбор номера 18265 #kege по информатике #ЕГЭ15
Автор: Л.Шастин
Уровень: Средний


🚩 Условие задачи:
В некоторых системах счисления, для записи оснований которых используются целочисленные переменные p<37 и s<35, выполняется равенство: R4_(p−1)+B0_(s+2)+ T3NK4_p = 23593399_10. Определите произведение подходящих значений p и s и укажите его в ответе в десятичной системе счисления.


👩‍💻 Код решения:
for p in range(30, 37):
for s in range(10, 35):
A = int(f'R4', p-1)
B = int(f'B0', s+2)
C = int(f'T3NK4', p)
if (A + B + C) == 23593399:
print(p * s)

Ответ: 780


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

1⃣ for p in range(30, 37):
• Цикл, перебирающий значения p от 30 до 36 (включительно)


2⃣ for s in range(10, 35):
• Вложенный цикл, перебирающий значения s от 10 до 34 (включительно)


3⃣A = int(f'R4', p-1)
• Преобразует строку 'R4' в число, интерпретируя её как число в системе счисления с основанием p-1


4⃣ B = int(f'B0', s+2)
• Преобразует строку 'B0' в число, интерпретируя её как число в системе счисления с основанием s+2


5⃣ C = int(f'T3NK4', p)
• Преобразует строку 'T3NK4' в число, интерпретируя её как число в системе счисления с основанием p


6⃣ if (A + B + C) == 23593399:
• Проверяет, равна ли сумма чисел A, B и C значению 23593399


7⃣ print(p * s)
• Если условие выполняется, выводит произведение p и s


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤‍🔥5🔥3👍2
🚩🚩 Разбор номера 18257 #kege по информатике #ЕГЭ17
Автор: Л.Шастин
Уровень:
Средний

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


👩‍💻 Код решения:
M = [int(x) for x in open('0. files/17.txt')]
R = []
for i in range(len(M)-1):
x, y = M[i], M[i+1]
i, j = i+1, i+2
if (i + j) % 10 == max(M) % 10:
R.append(abs((x+y) - (i+j)))
print(len(R), min(R))

Ответ: 1000 811


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

1⃣ M = [int(x) for x in open('0. files/17.txt')]
Читаем файл '0. files/17.txt', преобразуем каждую строку в целое число и сохраняем в список M


2⃣ R = []
Создаем пустой список R для хранения результатов


3⃣ for i in range(len(M)-1):
Запускаем цикл по индексам элементов списка M, кроме последнего


4⃣ x, y = M[i], M[i+1]
Получаем текущий элемент x и следующий элемент y из списка M


5⃣ i, j = i+1, i+2
Вычисляем индексы i и j для проверки условия (увеличиваем на 1 и 2 соответственно)


6⃣ if (i + j) % 10 == max(M) % 10:
Проверяем, равен ли остаток от деления суммы индексов i и j на 10 остатку от деления максимального элемента списка M на 10


7⃣ R.append(abs((x+y) - (i+j)))
Если условие выполняется, добавляем в список R модуль разности между суммой элементов x и y и суммой индексов i и j


8⃣ print(len(R), min(R))
Выводим количество элементов в списке R и минимальное значение из этого списка


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4👍2🔥1
🚩🚩 Разбор номера 14512 #kege по информатике #ЕГЭ24
Автор: Л.Шастин
Уровень:
Средний

🚩 Условие задачи:
Текстовый файл состоит из символов, обозначающих буквы латинского алфавита A, В и С и цифры 1 и 8.

Определите в прилагаемом файле максимальную длину подстроки, которая начинается и заканчивается на разные цифры, включает в себя равное количество букв B и C и не содержит других цифр, кроме первой и последней.

Для выполнения этого задания следует написать программу.


👩‍💻 Код решения:
s = open('0. files/24.txt').readline()
s = s.replace('1', '1 1').replace('8', '8 8')
maxi = 0
for x in s.split():
if x.count('1') == 1:
if x.count('B') == x.count('C'):
maxi = max(maxi, len(x))
print(maxi)

Ответ: 1315


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

1⃣s = open('0. files/24.txt').readline()
• Открываем файл '0. files/24.txt' и читаем первую строку, сохраняя её в переменную s


2⃣ s = s.replace('1', '1 1').replace('8', '8 8')
• Заменяем каждый символ '1' на '1 1' и каждый символ '8' на '8 8', удваивая их и добавляя пробелы между ними


3⃣ maxi = 0
• Инициализируем переменную maxi для хранения максимальной длины подходящей строки


4⃣ for x in s.split():
• Разбиваем строку s на список подстрок по пробелам и начинаем перебирать каждую подстроку в цикле


5⃣ if x.count('1') == 1:
• Проверяем, что текущая подстрока x содержит ровно один символ '1'


6⃣ if x.count('B') == x.count('C'):
• Проверяем, что количество символов 'B' равно количеству символов 'C' в текущей подстроке


7⃣ maxi = max(maxi, len(x))
• Если оба условия выше выполнены, обновляем maxi, сохраняя максимальное значение между текущим maxi и длиной подстроки x


8⃣print(maxi)
• Выводим максимальную длину подходящей подстроки, найденную в результате работы программы


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥5👍3🔥3
🚩🚩 Разбор номера 16264 #kege по информатике #ЕГЭ17
Автор: Е.Джобс
Уровень:
Базовый

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

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


👩‍💻 Код решения:
M = [int(x) for x in open('0. files/17.txt')]
D = [x for x in M if len(str(abs(x))) == 2 and x % sum(map(int, str(x))) == 0]
R = []
for i in range(len(M) - 1):
x, y = M[i], M[i + 1]
if (x % min(D) == 0) + (y % min(D) == 0) >= 1:
R.append(x + y)
print(len(R), max(R))

Ответ: 537 19247


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

1⃣ M = [int(x) for x in open('0. files/17.txt')]
Читает файл '0. files/17.txt', преобразует каждую строку в целое число и сохраняет в список M


2⃣ D = [x for x in M if len(str(abs(x))) == 2 and x % sum(map(int, str(x))) == 0]
Создает список D из чисел M, у которых ровно две цифры (учитывая модуль) и которые делятся на сумму своих цифр


3⃣ R = []
Инициализирует пустой список R для хранения сумм подходящих пар


4⃣ for i in range(len(M) - 1):
Цикл по индексам списка M (кроме последнего элемента, чтобы не выйти за границы)


5⃣ x, y = M[i], M[i + 1]
Берет текущий элемент x и следующий y из списка M


6⃣ if (x % min(D) == 0) + (y % min(D) == 0) >= 1:
Проверяет, что хотя бы одно из чисел x или y делится на минимальное число из списка D


7⃣ R.append(x + y)
Если условие выполняется, добавляет сумму x и y в список R


8⃣ print(len(R), max(R))
Выводит количество найденных пар и максимальную сумму из списка R


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
8🔥5👍4
🚩 Разбор номера 12797 #kege по информатике #ЕГЭ9
Автор: М.Попков
Уровень:
Средний

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

– в строке есть только одно число, которое повторяется дважды, остальные два числа различны;

– все неповторяющиеся числа нечетны, повторяющиеся числа чётны.

В ответе запишите только число.



👩‍💻 Код решения:
cnt = 0
for s in open('0. files/9.csv'):
M = sorted([int(x) for x in s.split(',')])
copied = [x for x in M if M.count(x) == 2]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied) == 2 and len(uncopied) == 2:
if all(x % 2 != 0 for x in uncopied):
if all(x % 2 == 0 for x in copied):
cnt += 1
print(cnt)

Ответ: 53


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

1⃣ cnt = 0
Инициализация счетчика для подсчета подходящих строк.


2⃣ for s in open('0. files/9.csv'):
Открытие файла и построчное чтение данных. Каждая строка s содержит числа, разделенные запятыми.


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


4⃣ copied = [x for x in M if M.count(x) == 2]
Создание списка чисел, встречающихся ровно 2 раза (дубликаты).


5⃣ uncopied = [x for x in M if M.count(x) == 1]
Создание списка уникальных чисел (встречаются 1 раз).


6⃣ if len(copied) == 2 and len(uncopied) == 2:
Проверка, что есть ровно 2 дублирующихся числа (1 пара) и 2 уникальных числа.


7⃣if all(x % 2 != 0 for x in uncopied):
Проверка, что все уникальные числа нечетные.


8⃣if all(x % 2 == 0 for x in copied):
Проверка, что все дублирующиеся числа четные.


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


🔟 print(cnt)
Вывод общего количества подходящих строк.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥3👍32🔥2
🚩🚩 Разбор номера 18176 #kege по информатике #ЕГЭ17
Автор: Д.Бахтиев
Уровень:
Средний

🚩 Условие задачи:
В файле содержится последовательность целых чисел.
Её элементы могут принимать целые значения от -100 000 до 100 000 включительно. Определите количество троек последовательности, сумма цифр элементов которых равна минимальному положительному элементу последовательности, оканчивающемуся на 4. В ответе запишите количество найденных троек, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.


👩‍💻 Код решения:
R = []
M = [int(x) for x in open('0. files/17.txt')]
W = [x for x in M if abs(x) % 10 == 4 and x > 0]
for i in range(len(M) - 2):
a, b, c = M[i], M[i + 1], M[i + 2]
summa = sum([int(x) for x in str(a) + str(b) + str(c) if x.isdigit()])
if summa == min(W):
R.append(a + b + c)
print(len(R), max(R))

Ответ: 11 180738

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

1⃣R = []
Создается пустой список R, в который будут записываться подходящие суммы троек чисел.


2⃣ M = [int(x) for x in open('0. files/17.txt')]
Открывается файл 17.txt, читаются все числа и сохраняются в список M (каждое число преобразуется в int).


3⃣ W = [x for x in M if abs(x) % 10 == 4 and x > 0]
В список W попадают только положительные числа из M, у которых последняя цифра равна 4 (например, 14, 24, -34 не подойдет, т.к. по условию x > 0).


4⃣ for i in range(len(M) - 2):
Цикл перебирает индексы списка M до предпоследнего элемента, чтобы можно было взять тройку чисел (a, b, c) = (M[i], M[i+1], M[i+2]).


5⃣ a, b, c = M[i], M[i + 1], M[i + 2]
Текущая тройка чисел из M записывается в переменные a, b и c.


6⃣ summa = sum([int(x) for x in str(a) + str(b) + str(c) if x.isdigit()])
- str(a) + str(b) + str(c) — числа a, b, c преобразуются в строки и объединяются в одну строку (например, 123, -45, 678 → "123-45678").
- [int(x) for x in ... if x.isdigit()] — из этой строки берутся только цифры (минус игнорируется), и они преобразуются обратно в числа.
- sum(...) — вычисляется сумма всех цифр в тройке чисел.


7⃣if summa == min(W):
Проверяется, равна ли сумма цифр минимальному числу из W (т.е. минимальному положительному числу, оканчивающемуся на 4).


8⃣ R.append(a + b + c)
Если условие выполнено, то сумма самой тройки чисел (a + b + c) добавляется в список R.


0⃣ print(len(R), max(R))
В конце выводится:
- количество найденных троек (len(R)),
- максимальная сумма из этих троек (max(R)).


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥5🔥3👍2
🚩🚩 Разбор номера 18450 #kege по информатике #ЕГЭ23
Автор: Сергей Горбачев
Уровень: Средний

🚩 Условие задачи:
У исполнителя есть три команды, которые обозначены цифрами:

1. Прибавить 3
2. Прибавить 4
3. Умножить на 2

Сколько существует программ, для которых при исходном числе 11 результатом будет являться отрезок [50;54], при этом траектория вычислений не содержит числа 23?


👩‍💻 Код решения:
def F(a, b: list):
if a >= min(b) or a == 23:
return a in b
return F(a + 3, b) + F(a + 4, b) + F(a * 2, b)


print(F(11, [50, 51, 52, 53, 54]))

Ответ: 3254


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

1⃣def F(a, b: list):
• Объявление функции F с двумя параметрами: a (число) и b (список чисел).


2⃣if a >= min(b) or a == 23:
• Условие: если a больше или равен минимальному элементу списка b ИЛИ a равен 23.


3⃣ return a in b
• Если условие выше выполняется, возвращается True/False (проверка, есть ли a в списке b).


4⃣ return F(a + 3, b) + F(a + 4, b) + F(a * 2, b)
• Если условие не выполняется, функция вызывает саму себя рекурсивно с тремя разными значениями a:
• Результаты этих вызовов суммируются.


5⃣ print(F(11, [50, 51, 52, 53, 54]))
Вызов функции с аргументами a = 11 и b = [50, 51, 52, 53, 54], затем вывод результата.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥54🔥4
🚩🚩 Разбор номера 9553 #kege по информатике #ЕГЭ25
Автор: Джобс Е.
Уровень:
Базовый

🚩 Условие задачи:
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
• символ «?» означает ровно одну нечетную цифру, кратную 3;
• символ «*» означает любую последовательность четных цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123435 и 12300495. Числа 123425 и 12355435 такой маске не соответствуют.

Найдите все числа, меньшие 109, соответствующие маске 24*68?35 и делящиеся без остатка на 13. В качестве ответа приведите все найденные числа в порядке возрастания, справа от числа укажите результат целочисленного деления его на 13.


👩‍💻 Код решения:
from re import *
for x in range(13, 10**9, 13):
if fullmatch('24[02468]*68[39]35', str(x)):
print(x, x // 13)

Ответ:
24268335 1866795
24868935 1912995
240068335 18466795
240668935 18512995
242668335 18666795
248468935 19112995


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

1⃣ from re import *
- Импорт всех функций из модуля re (регулярные выражения).


2⃣ for x in range(13, 10**9, 13):
- Цикл, перебирающий числа x от 13 до 1 миллиарда с шагом 13 (т.е. все числа, кратные 13).


3⃣ if fullmatch('24[02468]*68[39]35', str(x)):
- Проверяет, соответствует ли строкая запись числа x шаблону:
- 24 – начинается с цифр 24,
- [02468]* – затем любое количество чётных цифр (0, 2, 4, 6, 8),
- 68 – далее идёт 68,
- [39] – после 68 либо 3, либо 9,
- 35 – заканчивается на 35.


4⃣ print(x, x // 13)
- Если число соответствует шаблону, выводит само число и результат деления x на 13.


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥14👍12🔥5
🚩🚩 Разбор номера 18445 #kege по информатике #ЕГЭ13
Автор: Сергей Горбачев

🚩 Условие задачи:
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети.
Сеть задана IP-адресом 140.116.194.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, в двоичной записи которых каждый из четырёх байтов оканчивается нулём?
В ответе укажите только число.


👩‍💻 Код решения:
from ipaddress import *
net = ip_network('140.116.194.0/255.255.240.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
if s[7] == '0' and s[15] == '0' and s[23] == '0' and s[31] == '0':
cnt += 1
print(cnt)

Ответ: 1024


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

1⃣ from ipaddress import *
Импорт всех функций и классов из модуля ipaddress, который позволяет работать с IP-адресами и сетями


2⃣ net = ip_network('140.116.194.0/255.255.240.0', 0)
Создание объекта сети с адресом 140.116.194.0 и маской 255.255.240.0


3⃣ cnt = 0
Инициализация счётчика cnt для подсчёта подходящих IP-адресов


4⃣ for ip in net:
Цикл по всем IP-адресам в сети net


5⃣ s = f'{ip:b}'
Преобразование текущего IP-адреса ip в его двоичное представление в виде строки s


6⃣ if s[7] == '0' and s[15] == '0' and s[23] == '0' and s[31] == '0':
Проверка, что 8-й, 16-й, 24-й и 32-й биты (индексы 7, 15, 23, 31) в двоичной строке равны '0'


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


8⃣ print(cnt)
Вывод итогового значения счётчика cnt


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
37❤‍🔥8🔥4
🚩🚩 Разбор номера 19784 #kege по информатике #ЕГЭ23
Автор: kompege.ru
Уровень:
Базовый

🚩 Условие задачи:
У исполнителя имеются две команды, которые обозначены латинскими буквами:
A. Вычти 2
B. Если число чётное, раздели на 2, иначе вычти 3
Программа для исполнителя – это последовательность команд. Сколько существует программ, которые преобразуют исходное число 98 в число 1 и при этом траектория вычислений не содержит число 28?


👩‍💻 Код решения:
def F(a, b):
if a < b or a == 28:
return 0
if a == b:
return 1
else:
return F(a-2, b) + F(a // 2 if a % 2 == 0 else a - 3, b)

print(F(98, 1))

Ответ: 12318

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

1⃣ def F(a, b):
Объявление функции F с двумя параметрами a и b.


2⃣ if a < b or a == 28:
- Проверка условий: если a меньше b ИЛИ a равно 28.


3⃣ return 0
- Возвращает 0, если выполнилось условие выше.


4⃣ if a == b:
- Проверка, если a равно b.


5⃣ return 1
- Возвращает 1, если a равно b.


6⃣ else:
- Если ни одно из предыдущих условий не выполнилось.


7⃣ return F(a-2, b) + F(a // 2 if a % 2 == 0 else a - 3, b)
- Рекурсивный вызов функции F с разными аргументами


8⃣ print(F(98, 1))
- Вызов функции F с аргументами 98 и 1, и вывод результата.


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
25❤‍🔥4🔥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
❤‍🔥31👍1