
Python
Python. Задание из ЕГЭ по информатике

Вот, к примеру:
По шагам:
Открываем файл.
Строим список (prods) из произведений цифр отдельных элементов, попутно запоминая максимальный и минимальный элементы. Максимум и минимум ставятся в значение первого элемента, а затем пробегом по файлу мы их уточняем.
Как только у нас есть список, открытый файл больше не требуется, и дальнейший код идёт вне блока with, т.е. файл уже закрыт.
Теперь мы переходим к обработке троек. На основе итератора произведений цифр отдельных чисел мы строим итератор (tprods) из произведений цифр троек, удовлетворяющих условию задачи. К примеру, если первый итератор произведений возвращает их в таком порядке:
Проверку шаблона делаем при помощи регулярок на строковом представлении числа. Можно было обойтись без регулярок и перевода в строку, но алгоритм от этого не стал бы ни проще, ни быстрее.
Дальше вычисляем минимальное произведение, попутно подсчитывая их количество. Если произведений, удовлетворяющих условию, не нашлось, то количество (k) останется нулём, а min вернёт значение по умолчанию из параметра default.
И в конце выводим либо результат, либо сообщение, что подходящих троек не нашлось.
Сложность алгоритма - линейная, обработка выполняется в два прохода: первый - по файлу, второй - по списку произведений цифр в памяти. Меньше - не получится, т.к. по мере пробега последовательности минимум уменьшается, максимум увеличивается, критерий отбора произведений расширяется, и поэтому приходится хранить их все, пока точно не узнаем максимум и минимум.
from math import prod
from re import match
def digiter(n):
while n != 0: yield n % 10; n //= 10
def nwise(it, n):
lst = [next(it) for _ in range(n)]; yield lst
for elem in it:
lst = lst[1:] + [elem]; yield lst
with open("17a003.txt", "r") as file:
first = int(next(file))
mn, mx = first, first
prods = [prod(digiter(first))] + [
(mn := min(mn, n), mx := max(mx, n), prod(digiter(n)))[-1]
for s in file for n in [int(s)]]
d = (mx - mn) * (mx - mn)
tprods = (p for t in nwise(iter(prods), 3)
for p in [prod(t)] if p 0 else ["Троек не найдено"])
На ваших данных троек не найдено, т.к. нигде произведение цифр тройки не соответствует шаблону "*202*3*".По шагам:
Открываем файл.
Строим список (prods) из произведений цифр отдельных элементов, попутно запоминая максимальный и минимальный элементы. Максимум и минимум ставятся в значение первого элемента, а затем пробегом по файлу мы их уточняем.
Как только у нас есть список, открытый файл больше не требуется, и дальнейший код идёт вне блока with, т.е. файл уже закрыт.
Теперь мы переходим к обработке троек. На основе итератора произведений цифр отдельных чисел мы строим итератор (tprods) из произведений цифр троек, удовлетворяющих условию задачи. К примеру, если первый итератор произведений возвращает их в таком порядке:
1536, 1568, 21000, 7680, 16128, ...
то в nwise они пойдут так: [1536, 1568, 21000], [1568, 21000, 7680], [21000, 7680, 16128], ...
prod преобразует эти маленькие списки в произведения, а условие отсеет лишние произведения (которых большинство).Проверку шаблона делаем при помощи регулярок на строковом представлении числа. Можно было обойтись без регулярок и перевода в строку, но алгоритм от этого не стал бы ни проще, ни быстрее.
Дальше вычисляем минимальное произведение, попутно подсчитывая их количество. Если произведений, удовлетворяющих условию, не нашлось, то количество (k) останется нулём, а min вернёт значение по умолчанию из параметра default.
И в конце выводим либо результат, либо сообщение, что подходящих троек не нашлось.
Сложность алгоритма - линейная, обработка выполняется в два прохода: первый - по файлу, второй - по списку произведений цифр в памяти. Меньше - не получится, т.к. по мере пробега последовательности минимум уменьшается, максимум увеличивается, критерий отбора произведений расширяется, и поэтому приходится хранить их все, пока точно не узнаем максимум и минимум.
ответ 1012
Максим Зыкин
код хотелось бы
Похожие вопросы
- Какие задания из ЕГЭ по информатике можно решить вручную (без программирования)?
- Помогите поэтапно решить задачу из ЕГЭ по информатике. Нужно именно разобраться, как это решается и что в итоге выйдет
- Python Задание по програмированию
- 24 задание ЕГЭ ИНФОРМАТИКА PYTHON
- ЕГЭ информатика python
- Информатика Python задача ЕГЭ
- Информатика, 8 класс, Python
- Задания по информатике, Python
- Помогите с информатикой Задание сделать через ввод массива и for i in range() Python
- 25 задание ЕГЭ информатика. Всех четырёх часов не хватит, чтобы дождаться ответа на задачу. Подаю сигнал бедствия!