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

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

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

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🚩 Разбор номера из нового варианта #statgrad по информатике #ЕГЭ8
Автор: Статград
Уровень: Базовый


🚩 Условие задачи:
Все десятибуквенные коды, составленные из букв, входящих в слово
СКАНЕР, расположены в алфавитном порядке и пронумерованы.

Определите количество кодов, для которых одновременно выполнены условия:
1) номер кода в списке делится на 3;
2) первая буква кода – согласная;
3) код содержит ровно одну букву Р.


👩‍💻 Код решения:
from itertools import product
num = 0
cnt = 0
for s in product(sorted('СКАНЕР'), repeat=10):
word = ''.join(s)
num += 1
if num % 3 == 0:
if word[0] in 'СКНР':
if word.count('Р') == 1:
cnt += 1
print(cnt)

# Ответ: 4531250


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

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


2⃣ num = 0
Инициализация переменной num для отслеживания общего количества рассмотренных комбинаций.


3⃣ cnt = 0
Инициализация переменной cnt для подсчета количества комбинаций, удовлетворяющих условиям задачи.


4⃣ for s in product(sorted('СКАНЕР'), repeat=10):
Цикл for, в котором перебираются все возможные комбинации длиной 10 символов из отсортированных букв 'СКАНЕР'.


5⃣ word = ''.join(s)
Объединение символов из текущей комбинации в одно слово для дальнейшей проверки.


6⃣ num += 1
Увеличение счетчика num на 1 для отслеживания количества рассмотренных комбинаций.


7⃣ if num % 3 == 0:
Проверка, что номер рассматриваемой комбинации делится на 3 без остатка.


8⃣ if word[0] in 'СКНР':
Проверка, содержит ли первая буква слова 'С', 'К', 'Н' или 'Р'.


0⃣ if word.count('Р') == 1:
Проверка, что буква 'Р' встречается в слове ровно 1 раз.


1⃣0⃣ cnt += 1
Увеличение счетчика cnt на 1, если текущая комбинация удовлетворяет всем условиям.


1⃣1⃣ print(cnt)
Вывод количества комбинаций, удовлетворяющих заданным условиям.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
9663
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера #statgrad по информатике #ЕГЭ14
Автор: Статград
Уровень:
Средний

🚩 Условие задачи:
Числа AB267D1_p и F024A89_p записаны в системе счисления с основанием p.
При каком минимальном p сумма этих чисел будет делиться на p–1?


🚩 Теоретическая справка:
Так как функция int(num, base) работает только в диапазоне от 2 до 36, то нам приходится написать свою универсальную функцию my_int(), изучите её и используйте в сложных задачах.


👩‍💻 Код решения:
def my_int(num, base):
return sum(x*base**i for i, x in enumerate(num[::-1]))


for p in range(16, 100):
A = my_int([10, 11, 2, 6, 7, 13, 1], p)
B = my_int([15, 0, 2, 4, 10, 8, 9], p)
if (A + B) % (p-1) == 0:
print(p)
break

# Ответ: 50


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

1⃣ def my_int(num, base):
Определение функции my_int, которая принимает список чисел num и основание base.


2⃣ return sum(x*base**i for i, x in enumerate(num[::-1]))
Функция возвращает сумму произведений элементов списка num на соответствующие степени base.


3⃣ for p in range(16, 100):
Запуск цикла for, который перебирает числа от 16 до 99 и использует их в качестве p.


4⃣ if (my_int([10, 11, 2, 6, 7, 13, 1], p) + my_int([15, 0, 2, 4, 10, 8, 9], p)) % (p-1) == 0:
Проверка условия: сумма результатов функции my_int для двух списков их модуль по отношению к p-1 равен нулю.


5⃣ print(p)
Вывод числа p, которое удовлетворяет условиям, после чего программа завершает работу, используя оператор break.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
766
This media is not supported in your browser
VIEW IN TELEGRAM
🚩 Разбор номера #statgrad по информатике #ЕГЭ2
Автор: Статград
Уровень:
Базовый

🚩 Условие задачи:
Логическая функция F задаётся выражением:
((x ∨ y) → (y ∧ w)) ≡ ¬ ((y ∧ z) → (w ∨ x))
Дан частично заполненный фрагмент, содержащий неповторяющиеся
строки таблицы истинности функции F.

1 1 _ 1 | 1
0 _ 0 0 | 1
0 0 1 1 | 1


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

def F(x, y, z, w):
return ((x or y) <= (y and w)) == (not((y and z) <= (w or x)))


for a1, a2 in product([0, 1], repeat=2):
table = [(1, 1, a1, 1), (0, a2, 0, 0), (0, 0, 1, 1)]
if len(set(table)) == len(table):
for i in permutations('xyzw'):
if [F(**dict(zip(i, r))) for r in table] == [1, 1, 1]:
print(*i, sep='')

# Ответ: zywx


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

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


2⃣ def F(x, y, z, w):
Определение функции F с параметрами x, y, z, w.


3⃣ return ((x or y) <= (y and w)) == (not((y and z) <= (w or x)))
Возвращение результата выражения, которое сравнивает логические операции с параметрами функции.


4⃣ for a1, a2 in product([0, 1], repeat=2):
Цикл, в котором перебираются все возможные комбинации пар из 0 и 1.


5⃣ table = [(1, 1, a1, 1), (0, a2, 0, 0), (0, 0, 1, 1)]
Создание списка table с кортежами чисел 0 и 1, используемыми в качестве аргументов функции.


6⃣ if len(set(table)) == len(table):
Проверка условия, что все элементы в table уникальны.


7⃣ for i in permutations('xyzw'):
Цикл, который перебирает все перестановки символов 'xyzw'.


8⃣ if [F(**dict(zip(i, r))) for r in table] == [1, 1, 1]:
Проверка условия, что результаты функции F для каждого элемента из table равны [1, 1, 1].


0⃣ print(*i, sep='')
Вывод комбинации символов i без разделителя на экран.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
6443
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера #statgrad по информатике #ЕГЭ15
Автор: Статград
Уровень:
Базовый

🚩 Условие задачи:
При каком наименьшем целом A выражение
((y < 20) → (x > 70)) ∨ ¬((x < A) → (y > A))
окажется тождественно истинным при любых целых значениях x и y?


🚩 Теоретическая справка:
Все 15 номера суперудобно решать через функцию all() про нее писали в этой статье.


👩‍💻 Код решения:
def F(x, y, A):
return ((y < 20) <= (x > 70)) or (not((x < A) <= (y > A)))

for A in range(10000):
if all(F(x, y, A) for x in range(100) for y in range(100)):
print(A)
break

# Ответ: 71


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

1⃣ def F(x, y, A):
Определение функции F, которая принимает три аргумента: x, y и A.


2⃣ return ((y < 20) <= (x > 70)) or (not((x < A) <= (y > A)))
Функция возвращает результат логического выражения, которое проверяет два условия и возвращает результат их логической операции or.


3⃣ for A in range(10000):
Запуск цикла for, который перебирает значения A от 0 до 9999.


4⃣ if all(F(x, y, A) for x in range(100) for y in range(100)):
Проверка: все результаты функции F(x, y, A) истинны для всех комбинаций значений x от 0 до 99 и y от 0 до 99.


5⃣ print(A)
Вывод значения A, которое соответствует условиям задачи, после чего выполнение программы завершается с помощью оператора break.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
64321
🚩🚩 Разбор номера #statgrad по информатике #ЕГЭ17
Автор: Статград
Уровень:
Сложный

🚩 Условие задачи:
Назовём четвёркой четыре идущих подряд элемента
последовательности. Определите количество четвёрок, для которых
выполняются следующие условия:
– в четвёрке есть хотя бы два пятизначных числа и хотя бы одно не пятизначное;
– в четвёрке больше чисел, кратных 3, чем чисел, кратных 7;
– сумма элементов четвёрки больше максимального элемента
последовательности, запись которого заканчивается на 538, но меньше
удвоенного значения этого элемента.


👩‍💻 Код решения:
numbers = [int(x) for x in open('17.txt')]
filtered = [x for x in numbers if str(x)[-3:] == '538']
result = []

for i in range(len(numbers) - 3):
# x, y, z, w = numbers[i:i + 4]
length = [len(str(abs(a))) for a in numbers[i:i + 4]]

if 2 <= length.count(5) < 4:
multiples_of_3 = [a for a in numbers[i:i + 4] if a % 3 == 0]
multiples_of_7 = [a for a in numbers[i:i + 4] if a % 7 == 0]

if len(multiples_of_3) > len(multiples_of_7):
if max(filtered) < sum(numbers[i:i + 4]) < max(filtered) * 2:
result.append(sum(numbers[i:i + 4]))

print(len(result), max(result))

# Ответ: 260 106865


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

1⃣ numbers = [int(x) for x in open('17.txt')]
Чтение чисел из файла "17.txt" и преобразование их в целочисленный формат, помещение результатов в список numbers.


2⃣ filtered = [x for x in numbers if str(x)[-3:] == '538']
Создание нового списка под названием filtered, который содержит только элементы из numbers, у которых последние три цифры равны '538'.


3⃣ result = []
Инициализация пустого списка с именем result, в который будут помещаться результаты для последующего анализа.


4⃣ for i in range(len(numbers) - 3):
Запуск цикла for, который перебирает индексы элементов numbers за исключением последних трех элементов.


5⃣ # x, y, z, w = numbers[i:i + 4]
Комментарий указывает на предполагаемое использование переменных x, y, z, w для значений из подсписка numbers[i:i + 4], но непосредственно переменные не используются в данном участке кода.


6⃣ length = [len(str(abs(a))) for a in numbers[i:i + 4]]
Создание списка length, содержащего длины строковых представлений абсолютных значений элементов из подсписка numbers[i:i + 4].


7⃣ if 2 <= length.count(5) < 4:
Проверка условия: количество цифр "5" в длинах строковых представлений элементов равно или больше 2 и меньше 4.


8⃣ multiples_of_3 = [a for a in numbers[i:i + 4] if a % 3 == 0]
Формирование списка multiples_of_3, содержащего элементы из подсписка numbers[i:i + 4], которые делятся на 3 без остатка.


0⃣ multiples_of_7 = [a for a in numbers[i:i + 4] if a % 7 == 0]
Формирование списка multiples_of_7, содержащего элементы из подсписка numbers[i:i + 4], которые делятся на 7 без остатка.


1⃣0⃣ if len(multiples_of_3) > len(multiples_of_7):
Проверка условия: количество элементов, делящихся на 3 без остатка, больше количества элементов, делящихся на 7 без остатка.


1⃣1⃣ if max(filtered) < sum(numbers[i:i + 4]) < max(filtered) * 2:
Проверка условия: сумма элементов подсписка numbers[i:i + 4] находится в интервале между максимальным элементом списка filtered и удвоенным значением максимального элемента из filtered.


1⃣2⃣ result.append(sum(numbers[i:i + 4]))
Добавление суммы элементов подсписка numbers[i:i + 4] в список result.


1⃣3⃣ print(len(result), max(result))
Вывод количества элементов в списке result и максимального значения в этом списке.


Информатика ЕГЭ | itpy 👨‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
865