Ребят, еще несколько реакций на последний пост и заливаю шпору по 12 номеру ☝️
Ночью дропну плотный разбор 27 аналитического решения.
Ночью дропну плотный разбор 27 аналитического решения.
Для закрепления материала оставляю ссылку на подборку всех 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'))
В данном задании необходимо найти количество нулей в полученной строке.
Уровень: Базовый
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
Please open Telegram to view this post
VIEW IN TELEGRAM
10❤🔥10👍4 4🔥2 1
This media is not supported in your browser
VIEW IN TELEGRAM
Почему на экзамене ЕГЭ вас просят сохранять все ваши файлики в одну папку 🗂 #view
📱 Смотреть в TikTok
📱 Смотреть в YouTube
📱 Смотреть в Instagram
📺 Все мои видео в одном месте
➡ Информатика ЕГЭ | чатик itpy 🧑💻
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥7🔥5👨💻5👍2❤1
Задача 21425 #kege по информатике #шпора
Автор: Досрочная волна 2025
Уровень: Базовый
PS: Для начала просто внимательно прочитайте условие задачи и сравните его с оригиналом! Также публикую код решения, но пока без комментариев - они будут добавлены постами ниже.
В файле 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
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10❤4🔥4🤯2
Товарищи, что по реакциям, я для кого стараюсь? 🥲
⤵️ Продолжение шпаргалки по #ЕГЭ27 #useful
Первое, что необходимо сделать в этой задаче — открыть файл в Excel и, следуя инструкции на картинке, построить точечную диаграмму. С её помощью мы определим, в какой из кластеров попадает каждая точка из файла 27_B.txt.
Затем переходим к распределению этих точек в коде (обращаю внимание, что в этом примере я рассматриваю только файл B, так как он более нагляден).
👩💻 Код программы:
👩💻 Комментарии к коду:
1⃣
2⃣
3⃣
4⃣
5⃣
6⃣
7⃣
8⃣
0⃣
🔟
#⃣ Полный список разборов в одном месте
#⃣ Шпаргалки по всем остальным номерам ЕГЭ
➡ Информатика ЕГЭ | чатик itpy 🧑💻
Первое, что необходимо сделать в этой задаче — открыть файл в Excel и, следуя инструкции на картинке, построить точечную диаграмму. С её помощью мы определим, в какой из кластеров попадает каждая точка из файла 27_B.txt.
Затем переходим к распределению этих точек в коде (обращаю внимание, что в этом примере я рассматриваю только файл B, так как он более нагляден).
clustersB = [[], [], []]
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])
clustersB = [[], [], []]
• Создаем список из трех пустых подсписков для хранения точек трех кластеров
- clustersB[0] - первый кластер (первая четверть)
- clustersB[1] - второй кластер (четвертая четверть)
- clustersB[2] - третий кластер (вторая и третья четверти вместе)
for s in open('27_B.txt'):
Открываем файл '27_B.txt' для чтения и построчно обрабатываем его содержимое
s = s.replace(',', '.')
Заменяем запятые на точки для корректного преобразования в float
x, y = [float(i) for i in s.split()]
Разбиваем строку по пробелам и преобразуем части в числа с плавающей точкой
x - первая координата (абсцисса)
y - вторая координата (ордината)
if x > 0 and y > 0:
Распределяем точку в один из кластеров в зависимости от координат:
clustersB[0].append([x, y])
Если обе координаты положительные - точка в первой четверти (кластер 0)
elif x > 0 and y < 0:
Если x положительный, а y отрицательный - точка в четвертой четверти (кластер 1)
clustersB[1].append([x, y])
else:
Все остальные точки (вторая и третья четверти) попадают в кластер 2
clustersB[2].append([x, y])
Сюда попадают случаи:
x < 0 и y > 0 (вторая четверть)
x < 0 и y < 0 (третья четверть)
x > 0 и y = 0 (на оси X)
x < 0 и y = 0 (на оси X)
x = 0 (на оси Y, независимо от y)
Please open Telegram to view this post
VIEW IN TELEGRAM
15❤21 8👍7❤🔥3🤔1
Далее нам необходимо написать функцию для поиска центра кластера. Но прежде чем перейти к ней, реализуем вспомогательную функцию для вычисления расстояния между двумя точками.
Расстояние между двумя точками на плоскости между точками A(x1, y1) и B(x2, y2) вычисляется по формуле: d(A,B)= ((x2 - x1)**2 + (y2 - y1)**2)**0.5
Что можно описать функцией:
def d(A, B):
x1, y1 = A
x2, y2 = B
return ((x2 - x1)**2 + (y2 - y1)**2)**0.5
print(d([0, 0], [3, 4])) # 5.0
Но так же надо заметить, что эта функция уже описана в питоне, а именно в библиотеке math.
Тот же самый код, но короче через math:
from math import dist
print(dist([0, 0], [3, 4]))
Please open Telegram to view this post
VIEW IN TELEGRAM
5❤🔥8❤6🔥3
Теперь разберём функцию для поиска центра кластера. Для примера возьмём кластер:
[[0, 0], [4, 3], [2, 2], [5, 6]]
Напомню, что центром кластера называется точка, для которой сумма расстояний до всех остальных точек кластера минимальна.
Алгоритм следующий:
- Берём произвольную точку p из кластера.
- Вычисляем сумму расстояний от p до всех других точек g этого кластера.
- Повторяем для всех точек и выбираем ту, у которой сумма минимальна.
from math import dist
def center(cl):
R = []
for p in cl:
summa = 0
for g in cl:
summa += dist(p, g)
R.append([summa,p])
return min(R)[1]
clustersA = [[[0, 0], [4, 3], [2, 2], [5, 6]], []]
cl = clustersA[0]
print(center(cl)) # [2, 2] - центр первого кластера из двух
Суммы для всех точек:
15.638676800652844 [0, 0]
10.39834563766817 [4, 3]
10.06449510224598 [2, 2]
15.972527336075034 [5, 6]
from math import dist
Импорт функции для вычисления евклидова расстояния между точками.
def center(cl):
Функция, которая находит "центр" кластера (точку с минимальной суммой расстояний до остальных).
R = []
Список для сохранения результатов.
for p in cl:
Первый цикл – перебирает каждую точку кластера.
summa = 0
Обнуление суммы расстояний для текущей точки p.
for g in cl:
Вложенный цикл – вычисляет расстояние от p до всех точек g в кластере.
summa += dist(p, g)
Накопление суммы расстояний для каждой точки p
R.append([summa, p])
Cохранение суммы и точки p в список R.
return min(R)[1]
Поиск точки с минимальной суммой расстояний (центр).
clustersA = [[[0, 0], [4, 3], [2, 2], [5, 6]], []]
Тестовые данные: список из двух кластеров (второй пуст).
cl = clustersA[0]
Выбор первого кластера для обработки.
print(center(cl))
Вывод результата работы функции.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7❤6👍2
Кульминация решения (опять же на примере кластеров из файла B) - поиск центров кластеров и вычисление среднего арифметическое абсцисс центров кластеров файла B и среднего арифметическое ординат центров кластеров файла B.
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))
centersB = [center(cl) for cl in clustersB]
Находим центры каждого кластера из списка clustersB
pxB = sum(x for x, y in centersB) / 3 * 10000
Вычисляем среднюю x-координату центров кластеров, умножаем на 10000 и делим на 3 (масштабирование)
pyB = sum(y for x, y in centersB) / 3 * 10000
Вычисляем среднюю y-координату центров кластеров, умножаем на 10000 и делим на 3 (масштабирование)
print(int(pxB), int(pyB))
Выводим результат в виде целых чисел
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8❤🔥4👍3
Ребят, если найдёте интересные задачки с ДВ — кидайте их мне в лс @ilandroxxy или в анонимные сообщения канала (новая функция в Телеграме, можно отправить по кнопке с картинкой). Всем завтра удачи! Ни пуха ни пера! 💪 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤6❤🔥5
На предприятии каждой изготовленной детали присваивают серийный номер, состоящий из 246 символов. В базе данных для хранения каждого серийного номера отведено одинаковое и минимально возможное число байт.
Известно, что для хранения 703_569 серийных номеров доступно не более 77 Мбайт памяти.
Определите максимально возможную мощность алфавита, используемого для записи серийных номеров.
sym = 246
byte = 77 * 2 ** 20 / 703_569
# не более 77 Мбайт - поэтому округляем вниз
print(byte) # 114.758 -> 114
bit = 114 * 8
# не более 77 Мбайт - поэтому округляем вниз
print(bit / sym) # 3.707 -> 3
# Максимальная мощность:
print(2 ** 3) # 8
# Ответ: 8
На предприятии каждой изготовленной детали присваивают серийный номер, состоящий из 3410 символов. В базе данных для хранения каждого серийного номера отведено одинаковое и минимально возможное число байт.
Известно, что для хранения 2984523 серийных номеров доступно не менее 14 Мбайт памяти.
Определите минимально возможную мощность алфавита, используемого для записи серийных номеров.
from math import *
for k in range(1, 10000):
bit = ceil(log2(kod))
byte = ceil(3410 * bit / 8)
if 2_984_523 * byte >= 14 * 1024 * 1024:
print(kod)
break
# Ответ: 2
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥6👍4
В каждой строке шесть натуральных чисел. Определите среднее арифметическое чисел всех строк таблицы, для которых выполнены оба условия:
- в строке есть число, которое повторяется трижды, остальные три числа различны;
- повторяющееся число строки меньше, чем удвоенное минимальное из ее неповторяющихся чисел.
A = []
for s in open('9.csv'):
M = [int(x) for x in s.split(';')]
p3 = [i for i in M if M.count(i) == 3]
np = [i for i in M if M.count(i) == 1]
if len(p3) == 3 and len(np) == 3:
if p3[0] < 2 * min(np):
A.append(sum(M))
print(sum(A) // len(A))
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤7👍5
Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.
Сеть задана ІР-адресом одного из входящих в неё узлов 97.191.34.206 и сетевой маской 255.255.255.240. Определите наибольший IP-адрес данной сети, который может быть присвоен компьютеру.
from ipaddress import *
net = ip_network('97.191.34.206/255.255.255.240', 0)
for ip in net:
print(ip) # 97.191.34.206
# 97.191.34.207 - не учитываем так как широковещательный
#Ответ: 9719134206
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10👍7🫡4
Даны 9 буквы слова КОМПЬЮТЕР в алфавитном порядке и нужно найти код с нечетным номером, который не начинается на гласные буквы и содержит одну букву К.
from itertools import *
n = 0
for p in product(sorted('КОМПЬЮТЕР'), repeat=6):
n += 1
word = ''.join(p)
if word[0] not in 'ОЮЕ':
if word.count('К') == 1:
if n % 2 != 0:
print(n)
# Ответ: 472385
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8👍6🔥5
На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.
1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи дописывается справа две последние цифры троичной записи;
б) если число N не делится на 3, то остаток от деления умножается на 5, переводится в троичную запись и дописывается в конец числа.
3. Результат переводится в десятичную систему и выводится на экран.
Укажите наименьшее число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее чем 290.
def tri(n):
s = ''
while n > 0:
s += str(n % 3)
n //= 3
return s[::-1]
for n in range(1, 1000):
s = tri(n)
if n % 3 == 0:
s += s[-2:]
else:
s += tri(n % 3 * 5)
r = int(s, 3)
if r >= 290:
print(n)
break
# Ответ: 11
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤🔥5 4❤3
Определите в прилагаемом файле последовательность идущих подряд символов наибольшей длины, в которой символ D встречается 1 раз и он находится в начале, а также содержится 50 цифр. В ответе запишите длину найдённой последовательности.
f = open('24.txt').readline()
for i in '0123456789':
f = f.replace(i, '1')
f = f.split('D')
M = [len(x) for x in f if x.count('1') == 50]
print(max(M)+1)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤6❤🔥5
Все пятибуквенные слова, составленные из букв В, Е, Н, Е, Р, А записаны в алфавитном порядке и пронумерованы.
Под каким нечетным номером в списке стоит последнее слово, которое не начинается с буквы Н и содержит ровно две буквы В?
from itertools import *
k = 0
alph = sorted('ВЕНЕРА')
A = product(alph, repeat=5)
for i in A:
i = ''.join(i)
k += 1
if i[0] != 'Н' and i.count('В') == 2 and k % 2 != 0:
print(k)
# Ответ: 7607
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7❤6👍4
Операнды арифметического выражения записаны в системе счисления с основанием 27: 2107x792_27 + 565х211_27
В записи чисел переменной х обозначена неизвестная цифра из алфавита 27-ричной системы счисления.
Определите наименьшее значение х, при котором значение данного арифметического выражения кратно 26.
Для найденного х вычислите частное от деления значения арифметического выражения на 26 и укажите его в ответе в десятичной системе счисления.
for x in '0123456789ABCDEFGHIJKLMNOPQ':
a = int(f'2107{x}792', 27) + int(f'565{x}211', 27)
if a % 26 == 0:
print(a // 26)
break
#Ответ: 897607140
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9❤5❤🔥5
В файле 17.txt содержится последовательность целых чисел от -100 000 до 100 000 включительно. Определите количество пар элементов последовательности, в которых только один элемент является двузначным, а сумма элементов больше максимального элемента последовательности, оканчивающегося на 19. В ответе запишите без пробела кол-во найденных пар чисел, затем максимальную из их сумм. Под парой подразумевается два идущих подряд элемента последовательности.
f = open('17.txt').readline()
M = [int(i) for i in f]
max_19 = max(i for i in M if abs(i) % 100 == 19)
A = []
for i in range(len(M) - 1):
if (len(str(abs(M[i]))) == 2) + (len(str(abs(M[i+1]))) == 2) == 1:
if M[i] + M[i+1] > max_19:
A.append(M[i] + M[i+1])
print(len(A), max(A))
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥3🔥3👍1
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: убрать из кучи три камня или убрать из кучи семь камней или уменьшить количество камней в куче в три раза (количество камней, полученное при делении, округляется до меньшего).
Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 19 или меньше камней. В начальный момент в куче было S камней, S ≥ 20.
Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.
from math import ceil, floor
def F(s, n):
if s <= 19:
return n % 2 == 0
if n == 0:
return 0
h = [F(s-7, n-1), F(floor(s/3), n-1)]
return any(h) if (n - 1) % 2 == 0 else all(h)
print([s for s in range(20, 1000) if F(s, 2)])
print([s for s in range(20, 1000) if F(s, 3) and not F(s, 1)])
print([s for s in range(20, 1000) if F(s, 4) and not F(s, 2)])
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍4🔥4