Хочешь сдать ЕГЭ по математике на 80+?
🗣️ Хочу лично порекомендовать Вам репетитора, который точно знает, как сдать ЕГЭ на 80+, даже если вы только решили начать подготовку.
👩💻Дарья – преподает математику более 5 лет, а сама заканчивает в этом году Бауманку, поэтому точно знает все о поступлении на технические и экономические специальности, а ее ученики учатся в топовых вузах России: МИФИ, МГУ, ВШЭ💋
📚Подробную информацию о занятиях по подготовке к экзаменах можно узнать в ее канале, а также всем новым подписчикам Дарья отправляет полезные материалы для подготовки к экзаменам. Нужно только подписаться на канал и написать сообщение в личку💋
Не откладывай подготовку — занимайся с лучшими преподавателями уже сейчас и совершенствуйся с каждым днём!
👩💻Дарья – преподает математику более 5 лет, а сама заканчивает в этом году Бауманку, поэтому точно знает все о поступлении на технические и экономические специальности, а ее ученики учатся в топовых вузах России: МИФИ, МГУ, ВШЭ
📚Подробную информацию о занятиях по подготовке к экзаменах можно узнать в ее канале, а также всем новым подписчикам Дарья отправляет полезные материалы для подготовки к экзаменам. Нужно только подписаться на канал и написать сообщение в личку
Не откладывай подготовку — занимайся с лучшими преподавателями уже сейчас и совершенствуйся с каждым днём!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8👍4 3
This media is not supported in your browser
VIEW IN TELEGRAM
12249
#kege по информатике #ЕГЭ17Автор: ЕГКР 16.12.23
Уровень: Базовый
Определите количество троек элементов последовательности, в которых хотя бы один из трёх элементов оканчивается на 3, а сумма элементов тройки не больше максимального элемента последовательности, являющегося пятизначным числом, которое оканчивается на 3.
В ответе запишите количество найденных троек чисел, затем максимальную из сумм элементов таких троек. В данной задаче под тройкой подразумевается три идущих подряд элемента последовательности.
В данной задаче очень удобно собрать отдельный список для элементов оканчивающихся на 3 (список А) и потом пробежать все лежащие в нем элементы, чтоб добавить условие с пятизначными символам (список D).
D = [int(x) for x in open('0. files/17.txt')]
R = []
A = [x for x in D if abs(x) % 10 == 3]
B = [x for x in A if len(str(abs(x))) == 5]
for i in range(len(D) - 2):
x, y, z = D[i], D[i + 1], D[i + 2]
if ((x in A) + (y in A) + (z in A)) >= 1:
if (x + y + z) <= max(B):
R.append(x + y + z)
print(len(R), max(R))
# Ответ: 1767 99081
D = int(x) for x in open('0. files/17.txt')
- Создаем список D, содержащий целые числа из файла '17.txt'.
R = [ ]
- Инициализируем пустой список R для хранения результатов.
A = x for x in D if abs(x) % 10 == 3
- Создаем список A, содержащий все числа из D, заканчивающиеся на 3.
B = x for x in A if len(str(abs(x))) == 5
- Создаем список B, содержащий только те числа из A, которые являются пятиместными.
for i in range(len(D) - 2):
- Начинаем цикл для перебора элементов списка D с индексом i от 0 до len(D) - 3.
x, y, z = Di, Di + 1, Di + 2
- Присваиваем переменным x, y, z текущие и следующие два элемента из D.
if ((x in A) + (y in A) + (z in A)) >= 1:
- Проверяем, содержится ли хотя бы одно из значений x, y, или z в списке A.
if (x + y + z) <= max(B):
- Проверяем, меньше ли сумма x, y и z, чем максимальный элемент в B.
R.append(x + y + z)
- Если обе проверки прошли, добавляем сумму x, y и z в список R.
print(len(R), max(R))
- Выводим количество элементов в списке R и максимальное значение из этого списка.
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
2 9❤🔥4🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: kompege.ru
Уровень: Средний
Текстовый файл состоит из символов A, B, C, D и E.
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых комбинация символов AB встречается ровно 50 раз.
Важно после разбиения не забыть добавить по одному элементу справа и слева к строке r, так как мы удаляем пары символов, а отдельные символы должны оставить.
s = open('0. files/24.txt').readline()
s = s.split('AB')
maxi = 0
for i in range(len(s)-50):
r = 'B' + 'AB'.join(s[i:i+51]) + 'A'
maxi = max(maxi, len(r))
print(maxi)
# Ответ: 10128
s = open('0. files/24.txt').readline()
# Открываем файл '0. files/24.txt' и читаем первую строку.
s = s.split('AB')
# Разделяем строку на подстроки по разделителю 'AB' и сохраняем результат в список.
maxi = 0
# Инициализируем переменную maxi, которая будет содержать максимальную длину найденной строки.
for i in range(len(s)-50):
# Запускаем цикл, который будет проходить по индексам списка s от 0 до длины списка минус 50.
r = 'B' + 'AB'.join(si:i+51) + 'A'
# Формируем новую строку r, представляющую собой соединение элементов списка s от текущего индекса i до i+50 с добавлением 'B' в начале и 'A' в конце.
maxi = max(maxi, len(r))
# Обновляем значение maxi, если длина текущей строки r больше предыдущего значения maxi.
print(maxi)
# Выводим максимальную длину строки, соответствующую заданным условиям.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10 4❤🔥2 2
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Шастин Л
Уровень: Средний
Текстовый файл состоит из символов A, C, D, F и O.
Определите максимальное количество идущих подряд символов, среди которых не более 5 пар вида согласная + гласная в прилагаемом файле.
Чуть более сложная версия прошлой задачи.
s = open('0. files/24.txt').readline()
s = s.replace('C', 'D').replace('F', 'D')
s = s.replace('O', 'A')
s = s.split('DA')
maxi = 0
for i in range(len(s)-5):
r = 'A' + 'DA'.join(s[i:i+6]) + 'D'
maxi = max(maxi, len(r))
print(maxi)
Ответ: 27
s = open('24.txt').readline()
Открываем файл '0. files/24.txt' и читаем первую строку.
s = s.replace('C', 'D').replace('F', 'D')
Заменяем символы 'C' и 'F' на 'D' во всей строке.
s = s.replace('O', 'A')
Заменяем символ 'O' на 'A' во всей строке.
s = s.split('DA')
Разделяем строку на подстроки по разделителю 'DA' и сохраняем результат в список.
maxi = 0
Инициализируем переменную maxi для хранения максимальной длины найденной строки.
for i in range(len(s)-5):
Запускаем цикл по индексам списка s от 0 до длины списка минус 5.
r = 'A' + 'DA'.join(si:i+6) + 'D'
Формируем новую строку r, соединяя элементы списка s от текущего индекса i до i+5 с добавлением 'A' в начале и 'D' в конце.
maxi = max(maxi, len(r))
Обновляем значение maxi, если длина текущей строки r больше предыдущего значения maxi.
print(maxi)
Выводим максимальную длину строки, соответствующую условиям задачи.
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥9 5 4 1
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: PRO100 ЕГЭ
Уровень: Сложный
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых комбинация символов RO встречается ровно 21 раз, а комбинации символов ORO и ROR ни разу не встречаются.
Если ORO и ROR найдутся в строке, то не нужно отсеивать все строку - необходимо разбить ее и исследовать подстроки по отдельности!
s = open('0. files/24.txt').readline()
s = s.split('RO')
maxi = 0
for i in range(len(s)-21):
r = 'O' + 'RO'.join(s[i:i+22]) + 'R'
if 'ROR' in r or 'ORO' in r:
r = r.replace('ROR', 'RO OR')
r = r.replace('ORO', 'OR RO')
maxi = max(maxi, max([len(x) for x in r.split()]))
print(maxi)
Ответ: 814
s = open('24.txt').readline()
s = s.split('RO')
maxi = 0
for i in range(len(s)-21):
r = 'O' + 'RO'.join(si:i+22) + 'R'
if 'ROR' in r or 'ORO' in r:
r = r.replace('ROR', 'RO OR')
r = r.replace('ORO', 'OR RO')
maxi = max(maxi, max(len(x) for x in r.split()))
print(maxi)
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥8 6👍5
Товарищи, важный вопрос! Какой вариант оформления комментариев к коду вам нравится больше: как в прошлом посте (1⃣ от 23 февраля) или как в позапрошлом (2⃣ от 22 февраля)? 🤔
Anonymous Poll
52%
48%
This media is not supported in your browser
VIEW IN TELEGRAM
14513
#kege по информатике #ЕГЭ24Автор: Л. Шастин
Уровень: Базовый
Назовём маской образец строки, который строится на основании служебных знаков # и &, причём знак # обозначает непустую последовательность из идущих подряд букв, а знак & задает непустую последовательность из идущих подряд цифр.
Определите в прилагаемом файле максимальную длину подстроки, которая соответствует маске #&#.
Очень понравилась эта задача, идея решения заключается в приведении всех букв к одному символу и всех цифр к другому символу. Затем разбиваем полученную последовательность на пары, разделенные пробелами, и убираем лишние цифры справа, после чего находим самую длинную строку.
from string import *
maxi = 0
s = open('0. files/24.txt').readline()
for x in digits:
s = s.replace(x, '&')
for x in ascii_uppercase:
s = s.replace(x, '#')
s = s.replace('&#', '& #')
s = s.split()
for i in range(len(s)-1):
r = ''.join(s[i:i+2])
while r[-1] == '&':
r = r[:-1]
maxi = max(maxi, len(r))
print(maxi)
Ответ: 49
from string import *
maxi = 0
s = open('24.txt').readline()
for x in digits:
s = s.replace(x, '&')
for x in ascii_uppercase:
s = s.replace(x, '#')
s = s.replace('&#', '& #')
s = s.split()
for i in range(len(s)-1):
r = ''.join(s[i:i+2])
while r[-1] == '&':
r = r[:-1]
maxi = max(maxi, len(r))
print(maxi)
Наша Stepik подборкой задач
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤10🔥3 3👍1
Ребзя, пройдите, пожалуйста, опрос!
Хочу узнать свою аудиторию получше. В особенности понять сколько здесь учеников 8-го и 9-го классов😍
Хочу узнать свою аудиторию получше. В особенности понять сколько здесь учеников 8-го и 9-го классов
Anonymous Poll
2%
Учусь в 8 классе
1%
Учусь в 9 классе
9%
Учусь в 10 классе
61%
Учусь в 11 классе
8%
Уже студент
2%
Родитель
10%
Репетитор Информатики
2%
Репетитор другой предмет
5%
Просто неравнодушный
Новый канал по подготовке к ОГЭ по информатике
Недавний опрос был не просто так - мы готовили для вас кое-что интересное! Вместе с моим другом мы запустили новый канал, который поможет вам подготовиться к ОГЭ по информатике на отлично!
На канале вас ждут:
Скоро я расскажу подробнее о проекте и познакомлю вас с нашим новым автором - экспертом в области информатики, который знает, как сделать подготовку максимально эффективной
Пожалуй уже оставлю ссылку на канал
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5🔥4 4
К команде itpy присоединился Алексей, @lkeeeey 😀
Молодой специалист работает старшим мобильным разработчиком в проекте Extremum, а также делится своими знаниями и опытом, готовя ребят не только к сдаче экзамена ОГЭ по информатике, но и изучению различных языков прогрмирования (🤩
При поддержке нашей команды itpy он канал:
IT by lkey | itpy👨💻
Молодой специалист работает старшим мобильным разработчиком в проекте Extremum, а также делится своими знаниями и опытом, готовя ребят не только к сдаче экзамена ОГЭ по информатике, но и изучению различных языков прогрмирования (
python, c++, Kotlin, html, css, js
) При поддержке нашей команды itpy он канал:
IT by lkey | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥12 5🔥4 3
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Решу ЕГЭ
Уровень: Базовый
Все 5-буквенные слова, составленные из букв Б, К, Ф, Ц, записаны
в алфавитном порядке и пронумерованы. Вот начало списка:
1. БББББ
2. ББББК
3. ББББФ
4. ББББЦ
5. БББКБ
Запишите слово, которое стоит на 486-м месте от начала списка.
Разберем задачу 3 разными способами и каждый выберет, тот способ,который ему понравился.
s = sorted('БКФЦ')
print(s) # ['Б', 'К', 'Ф', 'Ц']
n = 0
for a in s:
for b in s:
for c in s:
for d in s:
for e in s:
slovo = a + b + c + d + e
n += 1
if n == 486:
print(n, slovo)
s = sorted('БКФЦ')
s,
содержащий отсортированные символы строки 'БКФЦ'.
print(s) # ['Б', 'К', 'Ф', 'Ц']
s
для проверки.n = 0
n,
который будем использовать для подсчета количества сгенерированных слов.for a in s:
for b in s:
for c in s:
for d in s:
for e in s:
s.
Каждый цикл отвечает за одну позицию в слове.slovo = a + b + c + d + e
slovo
путем объединения символов a, b, c, d, e.
n += 1
n
увеличивается на 1 для каждой новой комбинации.if n == 486:
print(n, slovo)
n
достигает значения 486, выводится номер комбинации и само слово.from itertools import *
n = 0
for p in product(sorted('БКФЦ'), repeat=5):
slovo = ''.join(p)
n += 1
if n == 486:
print(n, slovo)
from itertools import *
itertools,
который предоставляет функции для работы с комбинациями.n = 0
n
для подсчета количества сгенерированных слов.for p in product(sorted('БКФЦ'), repeat=5):
product,
которая генерирует все возможные комбинации из символов 'Б', 'К', 'Ф', 'Ц'
с длиной 5 .slovo = ''.join(p)
p
преобразуется в строку slovo
с помощью метода join.
n += 1
n
увеличивается на 1 для каждой новой комбинации.if n == 486:
print(n, slovo)
n
достигает значения 486, выводится номер комбинации и само слово.from itertools import *
for n, p in enumerate(product(sorted('БКФЦ'), repeat=5), 1):
slovo = ''.join(p)
if n == 486:
print(n, slovo)
from itertools import *
itertools.
for n, p in enumerate(product(sorted('БКФЦ'), repeat=5), 1):
enumerate,
которая добавляет счетчик n
к каждому элементу, генерируемому функцией product.
Счетчик начинается с 1.slovo = ''.join(p)
p
преобразуется в строку slovo
с помощью метода join.
if n == 486:
print(n, slovo)
n
достигает значения 486, выводится номер комбинации и само слово.Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8 4❤3🔥2
Как вам формат больших разборов, хотели бы видеть больше таких полдробных разборов на канале?
Anonymous Poll
75%
19%
6%
This media is not supported in your browser
VIEW IN TELEGRAM
11616
#kege по информатике #ЕГЭ8Автор: М. Ишимов
Уровень: Средний
Сколько существует семнадцатеричных пятизначных чисел, не содержащих в своей записи более двух цифр 1, при этом никакая нечётная цифра не стоит рядом с цифрой 1?
Данный способ позволяет перебрать алфавит и отсортировать его.
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
print(alphabet[3:17:2])
from itertools import *
cnt = 0
for s in product(alphabet[:17], repeat=5):
num = ''.join(s)
if num[0] != '0':
if num.count('1') <= 2:
for a in alphabet[3:17:2]:
num = num.replace(a, '*')
if '1*' not in num and '*1' not in num and '11' not in num:
cnt += 1
print(cnt)
Ответ: 1117608
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
sorted
сортирует символы в алфавитном порядке. print(alphabet[3:17:2])
from itertools import *
itertools,
который предоставляет функции для работы с генерациями комбинаций.cnt = 0
cnt,
которая будет использоваться для подсчета подходящих комбинаций.for s in product(alphabet[:17], repeat=5):
product,
которая генерирует все возможные комбинации длиной 5 из первых 17 символов алфавита (alphabet[:17]
).Каждая комбинация
s
представляет собой кортеж из 5 символов.num = ''.join(s)
s
преобразуется в строку num
с помощью метода join
.if num[0] != '0':
не равен '0'
.if num.count('1') <= 2:
'1'
встречается в строке
не более двух раз.for a in alphabet[3:17:2]:
num = num.replace(a, '*')
заменяется на '*'
в строке.if '1*' not in num and '*1' not in num and '11' not in num:
нет подстрок '1*', '*1'
и '11'
.cnt += 1
увеличивается на 1.print(cnt)
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤3🔥3❤🔥2
Forwarded from Программирование на Python | itpy 💻
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
subset = my_list[2:5]
print(subset) # Вывод: [3, 4, 5]
Здесь мы извлекаем подсписок, начиная с индекса 2 и заканчивая индексом 5 (не включая). Это полезно, когда нам нужна определенная часть списка.
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
subset = my_list[1::2]
print(subset) # Вывод: [2, 4, 6, 8, 10]
В этом примере мы извлекаем каждый второй элемент, начиная с индекса 1, то есть все нечетные ИНДЕКСЫ.
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
reverse_list = my_list[::-1]
print(reverse_list) # Вывод: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
Использование среза с отрицательным шагом позволяет нам легко создать список в обратном порядке.
my_string = "Hello, World!"
substring = my_string[7:12]
print(substring) # Вывод: "World"
В данном случае, мы извлекаем подстроку, начиная с индекса 7 и заканчивая индексом 12 (не включая). Это полезно для работы с текстовыми данными.
my_string = "Hello, World!"
substring = my_string[::2]
print(substring) # Вывод: "Hlo ol!"
Использование среза с шагом 2 помогает нам извлекать каждый второй символ из строки.
my_string = "Hello, World!"
reverse_string = my_string[::-1]
print(reverse_string) # Вывод: "!dlroW ,olleH"
Также, как и в случае с списками, срез с отрицательным шагом позволяет легко получить строку в обратном порядке.
Использование срезов делает код более эффективным и читаемым. Практикуйтесь в их применении, и вы обнаружите, насколько они улучшают ваши навыки работы с данными в Python.
Азим вкатывается в IT | itpy 💻
Наш второй канал по подготовке к ЕГЭ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7 3 3
Anonymous Poll
15%
53%
21%
11%
This media is not supported in your browser
VIEW IN TELEGRAM
8960
#kege по информатике #ЕГЭ25Автор: Е.Джобс
Уровень: Базовый
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
– символ «?» означает ровно одну произвольную цифру;
– символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123405 и 12300405.
Найдите первые пять чисел, больших 500 000, сумма делителей которых соответствует маске *7?. Найденные числа выведите в порядке возрастания, справа от каждого запишите найденную сумму делителей.
Нужно найти первые пять чисел, больших 500 000, сумма делителей которых соответствует маске *7?.
from fnmatch import *
def divisors(x):
div = []
for j in range(1, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))
k = 0
for x in range(500_001, 10**10):
summa = sum(divisors(x))
if fnmatch(str(summa), '*7?'):
print(x, summa)
k += 1
if k == 5:
break
Ответ:
500001 666672
500048 968874
500069 500070
500079 666776
500114 750174
from fnmatch import *
Импортируется модуль fnmatch.
def divisors(x):
Создаем функцию divisors.
div = []
Создаётся пустой список div
for j in range(1, int(x**0.5)+1):
Запускается цикл for, который проходит по всем числам от 1 до квадратного корня из x (включительно).
if x % j == 0:
Проверяется, делится ли число x на j без остатка.
div += [j, x // j]
Если j является делителем, то в список div добавляются как сам делитель j, так и результат деления x на j.
return sorted(set(div))
Возвращается отсортированный список уникальных делителей.
k = 0
Создаем счетчик.
for x in range(500_001, 10**10):
Запускается цикл for, который проходит по всем числам от 500,001 до 10^10.
summa = sum(divisors(x))
Для каждого числа x вычисляется сумма всех его делителей с помощью функции divisors(x), а затем результат сохраняется в переменной summa.
if fnmatch(str(summa), '*7?'):
Проверяется, соответствует ли строка, представляющая сумму делителей.
print(x, summa)
Если условие выше выполняется, то выводится число x и сумма его делителей summa.
k += 1
Увеличивается счётчик k на 1, так как найдено число, удовлетворяющее условию.
if k == 5:
Проверяется, достиг ли счётчик k значения 5.
break
Прерывает выполнение цикла for, если найдено 5 чисел, удовлетворяющих условию.
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9 7🤯6
This media is not supported in your browser
VIEW IN TELEGRAM
4333
#kege по информатике #ЕГЭ23Автор: /dev/inf advanced
Уровень: Средний
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Прибавить 3
3. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Известно, что исполнитель не может повторить команду, выполненную на предыдущем шаге. Например, если была выполнена команда 1, на следующем шаге могут быть выполнены только команды 2 или 3.
Сколько существует программ, для которых при исходном числе 1 результатом является число 25, и при этом траектория вычислений содержит число 5, но не содержит число 6?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 11, 12.
Исполнитель не может повторить команду, выполненную на предыдущем шаге.
def F(a, b, c):
if a >= b or a == 6:
return a == b
if c == '1':
return F(a + 3, b, '2') + F(a ** 2, b, '3')
if c == '2':
return F(a + 1, b, '1') + F(a ** 2, b, '3')
if c == '3':
return F(a + 1, b, '1') + F(a + 3, b, '2')
return F(a + 1, b, '1') + F(a + 3, b, '2') + F(a ** 2, b, '3')
print(F(1, 5, '') * F(5, 25, ''))
Ответ: 10
def F(a, b, c):
Создается функция F, которая принимает три аргумента.
if a >= b or a == 6:
Если текущее значение a больше или равно значению b, или a равно 6.
return a == b
Если условие из предыдущей строки выполняется, функция возвращает True, и False в противном случае.
if c == '1':
Проверяется, равно ли значение c строке '1'.
return F(a + 3, b, '2') + F(a 2, b, '3')
Если c == '1', функция вызывает саму себя дважды.
if c == '2':
Проверяется, равно ли значение c строке '2'.
return F(a + 1, b, '1') + F(a 2, b, '3')
Если c == '2', функция вызывает саму себя дважды.
if c == '3':
Проверяется, равно ли значение c строке '3'.
return F(a + 1, b, '1') + F(a + 3, b, '2')
Если c == '3', функция вызывает саму себя дважды.
return F(a + 1, b, '1') + F(a + 3, b, '2') + F(a 2, b, '3')
Если значение c не равно '1', '2' или '3' (например, пустая строка `''`), функция вызывает саму себя трижды.
print(F(1, 5, '') * F(5, 25, ''))
Результаты этих вызовов перемножаются, и итоговое значение выводится на экран.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10 7🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
11953
#kege по информатике #ЕГЭ23Автор: PRO100 ЕГЭ
Уровень: Средний
Исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить последнюю цифру
B. Добавить остаток от деления на 68
C. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Команда А прибавляет к числу его последнюю цифру. Например, из числа 68 получится число 76.
Команда B прибавляет к числу его остаток от деления на 68. Например, из числа 10 получится число 20.
Команда C возводит число в квадрат. Например, из числа 9 получится число 81.
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу. Например, к числу 10 нельзя применить команду A, так как 10 + 0 = 10.
Сколько существует программ, для которых при исходном числе 2 результатом является число 680, при этом траектория вычислений содержит число 68 и не содержит числа 100?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу. Например, к числу 10 нельзя применить команду A, так как 10 + 0 = 10.
from functools import lru_cache
@lru_cache(None)
def F(a, b):
if a >= b or a == 100:
return a == b
count = 0
x = a % 10
if x != 0:
count += F(a + x, b)
x = a % 68
if x != 0:
count += F(a + x, b)
x = a ** 2
if x != a:
count += F(x, b)
return count
print(F(2, 68) * F(68, 680))
Ответ: 47997789947424
from functools import lru_cache
Импортируется декоратор lru_cache из модуля functools.
@lru_cache(None)
Декоратор lru_cache применяется к функции . Параметр None означает, что кэш не имеет ограничений по размеру.
def F(a, b):
Определяется функция F, которая принимает два аргумента.
if a >= b or a == 100:
Если текущее значение a больше или равно значению b, или a равно 100.
return a == b
Если условие из предыдущей строки выполняется, функция возвращает True, и False в противном случае.
count = 0
Создаем счетчик.
x = a % 10
Вычисляется последняя цифра числа a.
if x != 0:
Проверяется, не равна ли последняя цифра числа a нулю.
count += F(a + x, b)
Если последняя цифра числа a не равна нулю, функция вызывает саму себя с аргументами (a + x, b) и результат этого вызова добавляется к переменной count.
x = a % 68
Вычисляется остаток от деления числа a на 68.
if x != 0:
Проверяется, не равен ли остаток от деления числа a на 68 нулю.
count += F(a + x, b)
Если остаток от деления числа a на 68 не равен нулю, функция вызывает саму себя с аргументами (a + x, b) и результат этого вызова добавляется к переменной count.
x = a** 2
Вычисляется квадрат числа a.
if x != a:
Проверяется, не равен ли квадрат числа a самому числу a.
count += F(x, b)
Если квадрат числа a не равен самому числу a, функция вызывает саму себя с аргументами (x, b) и результат этого вызова добавляется к переменной count.
return count
Возвращается значение переменной count.
print(F(2, 68) * F(68, 680))
Результаты этих вызовов перемножаются, и итоговое значение выводится на экран.
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥12 8❤6
This media is not supported in your browser
VIEW IN TELEGRAM
11228
#kege по информатике #ЕГЭ9Автор: М.Ишимов
Уровень: Сложный
Откройте файл электронной таблицы, содержащей в каждой строке семь натуральных чисел. Определите сумму чисел всех строк таблицы, для которых выполнены оба условия:
– в строке есть только одно число, которое повторяется трижды, и только два числа, каждое из которых повторяется дважды;
– четыре наименьших числа строки можно разбить на две пары чисел с нечётными суммами.
В ответе запишите полученное число.
Определите сумму чисел всех строк таблицы
from itertools import *
summa = 0
for s in open('9.txt'):
M = sorted([int(x) for x in s.split()])
copied_2 = [x for x in M if M.count(x) == 2]
copied_3 = [x for x in M if M.count(x) == 3]
if len(copied_3) == 3 and len(copied_2) == 4:
if any(sum(p[:2]) % 2 != 0 and sum(p[2:]) % 2 != 0 for p in permutations(M[:4])):
summa += sum(M)
print(summa)
Ответ: 4675
from itertools import *
Импортируется модуль itertools.
summa = 0
Создается переменная summa.
for s in open('9.txt'):
В цикле for происходит построчное чтение файла. Каждая строка файла сохраняется в переменную s.
M = sorted([int(x) for x in s.split()])
Строка s разбивается на список строк с помощью метода split(). Каждая строка преобразуется в целое число с помощью int(x). Полученный список чисел сортируется и сохраняется в переменную M.
copied_2 = [x for x in M if M.count(x) == 2]
Создается список copied_2, который содержит элементы из списка M, встречающиеся ровно два раза.
copied_3 = [x for x in M if M.count(x) == 3]
Создается список copied_3, который содержит элементы из списка M, встречающиеся ровно три раза.
if len(copied_3) == 3 and len(copied_2) == 4:
Проверяется условие: если длина списка copied_3 равна 3 и длина списка copied_2 равна 4 .
if any(sum(p[:2]) % 2 != 0 and sum(p[2:]) % 2 != 0 for p in permutations(M[:4])):
Генерируются все возможные перестановки первых четырех элементов списка M . Для каждой перестановки p проверяется, является ли сумма первых двух элементов нечетной и сумма последних двух элементов также нечетной.
summa += sum(M)
Сумма всех элементов списка M добавляется к переменной summa.
print(summa)
Выводится значение переменной summa.
Второй канал про теорию Python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥14👍8🔥6 6