Компьютер работал год, компьютер работал два...

Дисклеймер: к экзамену по решениям с сайта решу-егэ готовиться можно. Но жить так нельзя.

Наткнулась с одной ученицей на комбо "задачка с решениями" в ЕГЭ по информатике. Задача из "типа 8" (то, что в экзамене может выскочить под номером 8). Ещё конкретнее - личный номер задачки на сайте 40724.

Поглядим на решения - их несколько разных

Тут полностью поместилось первое

Тут полностью поместилось первое "другое решение на языке Python" и заголовок второго

Тут уже только второе

Тут уже только второе "другое решение на языке Python" полностью, но без хвоста туда вправо (скрыто прокруткой)

Хвост последнего "другого решения", увы, не скринится из-за горизонтальной прокрутки, прокрутка не лезет в экран (либо нужны два скрина по горизонтали, мне лень), так что копирую мышкой:

первое длинное if внизу скрина:
if a.count('А') == 2 and a.count('С') == 1 and a.count('В') == 1 and a.count('Е') ==1 and a.count('Т')==1 and a.count('Л') == 1 and a.count('Н') == 1:

второе длинное if внизу скрина:
if i1 != i2 and i2 != i3 and i3 != i4 and i4 != i5 and i5 != i6 and i6 != i7 and i7 != i8 and (not(a in sett)):

Что не так с последним "другим решением"

Давайте над этим кодом импортируем модуль времени, запомним время на старте, в конце программы запомним ещё время финиша, и, наконец, выведем разность:

import time
start = time.time()

(код с сайта)

finish = time.time()
print(finish - start)

Мне сейчас вывелось полминуты с хвостом. Это много?

Ну, как сказать. Давайте посмотрим, сколько чего считал мой бедный компьютер.

Переменные i1, i2, ... i8 пробегают отдельно и самостоятельно все элементы имени (слова) "СВЕТЛАНА". Каждая назначается восемью способами, каждая назначается самостоятельно, т.е., имеем восемь в восьмой степени вариантов.

Вычислим это восемь в восьмой приблизительно, округлив вниз: восемь же - это куб двойки. Надо куб двойки в восьмой степени вычислить - двойка в двадцать четвёртой.

Двойка в десятой чуть больше тысячи. Двойка в двадцатой - миллион с хвостом.

Двойка в четвёртой - шишнацать. Шишнацать лямов только одних операций сборки проекта (формирования строки a).

Далее внутри строчки a ведётся подсчёт того-этого уже в первом if. Надо причём понимать, что "подсчёт внутри a" - это последовательный просмотр всей строки каждым счётчиком:

a.count('A') == 2 - потенциально восемь сравнений буквы 'A' с элементами строки a, с добавочным дальше сравнением количества равенств с двойкой.

a.count('С') == 1 - тоже восемь потенциально и др.

Дальше слегка спасает, что if на питоне ленивый - если одно сравнение провалено (скажем, a.count('A') не вышел в двойку), дальше он не посмотрит.

И всё же, всё же. Сколько вариантов, когда он пройдёт в первом if до последних своих трёх сравнений, т.е. окажется истинным

a.count('А') == 2 and a.count('С') == 1 and a.count('В') == 1 and a.count('Е') ==1

?

Оставим этот вопрос читателю в качестве занимательного упражнения.

Да и второй длинный if тоже, пожалуй, оставим.

И напоследок

В ЕГЭ так вот делать можно. Там полминуты не время. Даже минута - не время.

При этом факт, что решение "второе другое" составить-то проще всего. Оно человеко-читаемое более всех.

Вопрос для гиков: как написать решение этой задачи, чтобы работало год?

Лига образования

6.2K постов22.7K подписчиков

Правила сообщества

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


ДЛЯ АВТОРОВ:


Приветствуются:

-уважение к читателю и открытость

-желание учиться

Не рекомендуются:

-публикация недостоверной информации


ДЛЯ ЧИТАТЕЛЕЙ:


Приветствуются:

-конструктивные дискуссии на тему постов

Не рекомендуются:

-личные оскорбления и провокации

-неподкрепленные фактами утверждения


В этом сообществе мы все союзники - мы все хотим учиться! :)