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

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

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

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
🚩 Разбор номера 11201 #kege по информатике #ЕГЭ8
Автор: С.Якунин
Уровень: Средний


🚩 Условие задачи:
Полина составляет слова, переставляя буквы в слове ПАЙТОН. Сколько слов может составить Полина, если известно, что сумма порядковых номеров гласных букв, в каждом из них, равна 6? Буквы нумеруются слева направо, начиная с единицы.


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


👩‍💻 Код решения:
from itertools import *
cnt = 0
for p in permutations('ПАЙТОН'):
word = ''.join(p)
summa = word.index('А')+1 + word.index('О')+1
if summa == 6:
cnt += 1
print(cnt)

Ответ: 96


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

1⃣from itertools import *
Импортируется модуль itertools для работы с перестановками (permutations).


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


3⃣ for p in permutations('ПАЙТОН'):
Цикл перебирает все возможные перестановки букв в слове 'ПАЙТОН'.


4⃣ word = ''.join(p)
Каждая перестановка p (это кортеж букв) объединяется в строку word.


5⃣ summa = word.index('А')+1 + word.index('О')+1
- word.index('А') возвращает индекс буквы 'А' в строке (начиная с 0).
- +1 добавляется, чтобы считать позицию с 1 (как в обычном порядке).
- Аналогично для буквы 'О'.
- summa — это сумма позиций букв 'А' и 'О' в текущей перестановке.


6⃣ if summa == 6:
Проверяется, равна ли сумма позиций 'А' и 'О' 6.


7⃣ cnt += 1
Если условие выполнено (summa == 6), счетчик увеличивается на 1.


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


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

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

🚩 Условие задачи:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из кучи один камень, либо, если в куче 4 или больше камней, он может убрать четыре камня, либо, если количество камней в куче кратно трем, он может уменьшить количество камней в куче в три раза.

Игра завершается в тот момент, когда количество камней в куче становится не более 1.

Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 1 камня или меньше.

В начальный момент в куче было S камней; 4 ≤ S ≤ 100.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

Задание 20.
Для игры, описанной в задании 19, найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

− Петя не может выиграть за один ход;

− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.

Найденные значения запишите в ответе в порядке возрастания.


Задание 21.
Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.


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


👩‍💻 Код решения:
def F(s, n):
if s <= 1:
return n % 2 == 0
if n == 0:
return 0
h = [F(s - 1, n - 1)]
if s >= 4:
h += [F(s - 4, n - 1)]
if s % 3 == 0:
h += [F(s / 3, n - 1)]
return any(h) if (n - 1) % 2 == 0 else all(h)

print([s for s in range(4, 100 + 1) if F(s, 2)])
print([s for s in range(4, 100 + 1) if F(s, 3) and not F(s, 1)])
print([s for s in range(4, 100 + 1) if F(s, 4) and not F(s, 2)])

Ответы:
6
7 10
8



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

1⃣ def F(s, n):
• Объявление функции F с параметрами s (текущее состояние) и n (количество оставшихся ходов)


2⃣ if s <= 1:
• Проверка, если s меньше или равно 1, игра завершена


3⃣ return n % 2 == 0
• Возвращает True, если n чётное (победа текущего игрока), иначе False


4⃣ if n == 0:
• Проверка, если ходы закончились (n = 0), игра проиграна


5⃣ return 0
• Возвращает 0 (ложь), так как нет ходов для победы


6⃣ h = [F(s - 1, n - 1)]
• Рекурсивный вызов F для хода s - 1 и уменьшенного n, результат добавляется в список h


7⃣ if s >= 4:
• Проверка, можно ли сделать ход s - 4


8⃣ h += [F(s - 4, n - 1)]
• Если s >= 4, рекурсивный вызов F для s - 4 и уменьшенного n, результат добавляется в h


0⃣ if s % 3 == 0:
• Проверка, делится ли s на 3


🔟 h += [F(s / 3, n - 1)]
• Если s делится на 3, рекурсивный вызов F для s / 3 и уменьшенного n, результат добавляется в h


1⃣1⃣ return any(h) if (n - 1) % 2 == 0 else all(h)
• Если предыдущий ход был чётным ((n - 1) % 2 == 0), возвращает any(h) (хотя бы один выигрышный ход), иначе all(h) (все ходы должны быть выигрышными)


1⃣2⃣ print([s for s in range(4, 100 + 1) if F(s, 2)])
• Выводит список s от 4 до 100, где игрок может выиграть за 2 хода (F(s, 2) = True)


1⃣3⃣ print([s for s in range(4, 100 + 1) if F(s, 3) and not F(s, 1)])
• Выводит список s от 4 до 100, где игрок может выиграть за 3 хода, но не за 1 (F(s, 3) = True и F(s, 1) = False)


1⃣4⃣ print([s for s in range(4, 100 + 1) if F(s, 4) and not F(s, 2)])
• Выводит список s от 4 до 100, где игрок может выиграть за 4 хода, но не за 2 (F(s, 4) = True и F(s, 2) = False)



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

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


🚩 Условие задачи:
Текстовый файл состоит из символов F, G, Q, R, S и W. Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых подстрока FSRQ встречается ровно 80 раз.


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


👩‍💻 Код решения:
s = open('0. files/24.txt').readline()
s = s.split('FSRQ')
maxi = 0
for i in range(len(s)-80):
r = 'SRQ' + 'FSRQ'.join(s[i:i+81]) + 'FSR'
maxi = max(maxi, len(r))
print(maxi)

Ответ: 2379


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

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


2⃣ s = s.split('FSRQ')
Разбиваем строку s на список подстрок, используя разделитель 'FSRQ'


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


4⃣ for i in range(len(s)-80):
Запускаем цикл по индексам списка s, оставляя запас в 80 элементов для обработки последующих 81 элементов


5⃣ r = 'SRQ' + 'FSRQ'.join(s[i:i+81]) + 'FSR'
Формируем строку r, соединяя 81 подстроку из списка s с разделителем 'FSRQ', добавляя префикс 'SRQ' и суффикс 'FSR'


6⃣ maxi = max(maxi, len(r))
Обновляем maxi, если длина строки r больше текущего значения maxi


7⃣ print(maxi)
Выводим максимальную найденную длину строки r


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥52🔥2
🚩 Разбор номера 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