Kaspersky New Year

Программа-шутка, частично решающая Новогоднюю задачу Евгения Касперского.

Предыстория такова. Каждый год, числа так-эдак 28-го, Декабря-месяца, Евгений Касперский задаёт себе и своим единомышленникам задачу, требующую подбора решения вручную. Публикация нетривиальных решений этой задачи как правило сопряжена с получением ценных призов — например, пожизненной лицензии на его Антивирус. Я лично его программами не пользуюсь, хотя когда-то в крайних случаях использовал бесплатную полезную утилиту TDSSKiller. Соответственно, его подарки нам без надобности, а вот задача вставила не по-детски. Кстати, перебирать решения в уме желания тоже нет, я же не математик-миллиардер какой-нибудь.

Итак. Есть числа 10 9 8 7 6 5 4 3 2 1. Нужно поставить между ними любые математические операторы так, чтобы итоговое выражение равнялось Новому Году. В этом году это число было, как вы понимаете, 2020.

Например: 10 + (9 * 8 * 7 — 6 + 5 ) * 4 — 3 + 2 — 1 = 2020

Кстати, в данном случае без скобок никак.

Операторы и функции могут быть ЛЮБЫМИ: 4 арифметических, скобки, факториал(это, кто забыл 5! = 1*2*3*4*5), сдвиги, возведение в степень и бог знает какие ещё функции, неведомые нам, простым людям, не окончившим 4-й факультет Высшей школы КГБ.

Как только решение или семейства решений найдено — отбрасывается левое число.

9 8 7 6 5 4 3 2 1 = 2020. Ищем решение дальше…

Например: 9 + (8 * 7 * 6 — 5 + 4 ) * 3 * 2 + 1 = 2020

Решений может быть много — сколько удастся найти. А меж тем, отбрасываем 9-ку.

8 7 6 5 4 3 2 1 = 2020. Тут без факториала уже никак:

8 * 7! * 6 / 5! + 4 + 3 — 2 — 1 = 8 * 5040 * 6 / 120 + 4 + 3 — 2 — 1 = 2020

8 * 7 * 6! / 5 / 4 + 3 + 2 — 1 = 8 * 7 * 720 / 5 / 4 + 3 + 2 — 1 = 2020

Отбрасываем 8-ку.

7! — (6 + 5!) * 4! + 3 + 2 — 1 = 5040 — (6 + 120) * 24 + 3 + 2 — 1 = 2020

А вот на 6-ку вариантов уже нет. Ближайший вариант с факториалами и двумя парами скобок будет в 2034-м году. А ближайший вариант из прошлого для 2017-го года.

6 * (5! — 4 — 3 ) * (2 + 1) = 6 * (120 — 4 — 3 ) * (2 + 1) = 2034

(6! / 5 + 4!) * 3! * 2 + 1 = (720 / 5 + 24) * 6 * 2 + 1 = 2017

На 5-ку — ближайший вариант ждёт нас в 2040-м году:

5! * (4 + 3! * 2 + 1) = 120 * (4 + 6 * 2 + 1) = 2040

И так далее отбрасываем до нуля. Евгений дошёл-таки до нуля, конечно, пользуясь знаниями полученными в секретной лаборатории! То есть, даже из нуля, можете ли вы себе представить, можно получить 2020 !

Для поиска решений с 6-и для 2020-го года нужно вводить более сложные, быстро возрастающие функции. А пока, можно развлекаться поисками семейств решений, которые так и не были найдены Евгением и его товарищами. К слову сказать, сам Евгений предлагает эту задачу для перебора решений вручную, а не так, с помощью какого-то, понимаешь, программирования. Но мне и так весело было.

Новогодняя задача Касперского и её частичное решение., изображение №1

Для того, чтобы не портить Евгению все последующие новогодние праздники, я публикую демо-версию приложения с возможностью анализа решений для прошлых, а не будущих годов. Программа поддерживает перебор вариантов,учитывая 4 базовых оператора, одну, две и три пары скобок и факториалы. Вложенные скобки не поддерживаются. В дальнейшем, по мере сил, буду добавлять разные возможности в программу. Я не профессиональный программист, так что, если у кого не запустится, пишите. Написана на C++Builder 6.0. Android для запуска не подойдёт. Только Windows.

У Евгения Касперского зачастую проскакивают и другие интересные задачи на комбинаторику. Будем посмотреть.

Вот ссылка на оригинальный пост с задачей:

https://e-kaspersky.livejournal.com/683875.html?thread=10098531#t10098531

Вот статья в Контактике:

https://vk.com/@e_kaspersky-otvety-na-zadachu-2020

Ссылка на моё приложение :