Содержание

2027

Скоро наступит 2027 год. Так-то ещё не очень скоро, смотря в какой временной шкале находиться. Но если думать в масштабах возраста Вселенной, то прям ваще скоро. Две тысячи двадцать седьмой год по григорианскому календарю — невисокосный год, начинающийся в пятницу. Это 2027 год нашей эры, 7‑й год 3‑го десятилетия XXI века 3‑го тысячелетия, 8‑й год 2020‑х годов.

В кои-то веки число года является простым, не так уж часто это бывает. Например, предыдущий простой (с точки зрения математики) год был 2017. Следующим за 2027 простым будет 2029, а потом уже только 2039. Года с 2018 по 2026 были очень не простыми во всех смыслах, так что будем надеяться, что хотя бы в простом 2027 станет попроще.

Эта страничка посвящена не 2027 году, а номеру года – числу 2027.

2027

Про само число можно многое сказать. Например, вот тут: https://webcalypt.com/tools/number/2027 собрано довольно большое количество всяких интересных фактов и преобразований этого числа в разные единицы измерения.

Я же хочу продолжить свои упражнения, связанные с занимательными вычислениями.

2027 из последовательных цифр

Впервые с подобной задачей я встретился в каком-то древнем выпуске «Науки и жизни» в рубрике «Психологический практикум». Я бы нашёл этот номер и привёл бы скрин в качестве пруфа, но у меня высокие отношения с издательством этого журнала, как у Рабиновича с банком, поэтому верьте мне на слово :)

Задача такая: из последовательности цифр 1234567890 и знаков математических действий нужно составить такое выражение, результат которого даст нужное нам число, в данном случае число года. Вначале я придумал вот такое решение:

Затем возникла идея привлечь к решению этой задачи DeepSeek. Я дал ему в качестве примера своё решение с факториалом и попросил найти аналогичное, но без факториала. DeepSeek долго пытался, и в результате так и не смог, хотя был близок – нашёл решение для 2028. Но при этом он предложил мне программу на phyton, которая сможет это сделать. Только она почему-то не работала :)

DeepSeek признал поражение

В конце концов, я попросил его переписать программу на javascript, добавил туда разной функциональности, чтобы можно было задавать последовательности цифр, искать нужное значение выражения, играться действиями и т.п. Конечно же, программа методом полного перебора смогла найти все возможные варианты (их оказалось 12):

Фактически решений было всего 4, а дальше вариации на тему использования нуля. Если ноль вообще исключить из набора цифр, то первое решение с откидыванием цифр 8,9,0 уйдёт и останутся только таких 3 решения:

А вот и наш первый вариант, если не использовать 8,9,0:

Из последовательности 234567890 можно получить:

Если ноль отбросить:

А если поставить нолик впереди, то получим такие решения:

В общем, уже ничего нового :) Что-то новенькое можно получить, если переставить цифры задом-наперёд:

Как ни странно, решений тоже 12 штук. А фактически это всего 2 решения и вариации с нивелированием ненужных цифр в хвосте. Как видим, без нуля тут уже никак не обойтись. А вот если отбросить «мешающие» 2,1,0, то как раз и получим наши 2 решения:

Где-то я натыкался на феноменально проделанную работу, в которой некий энтузиаст нашёл решения для всех чисел в большом диапазоне (типа от 0 до 10000 или до 1000000), кроме какого-то одного. Причём это делала программа полным перебором всех вариантов, так же, как и моя программка. И решения для этого единственного числа с использованием десяти цифр и 4-х знаков действий не нашлось. Вот какое это было число, я не помню.

2027 из одинаковых цифр

Похожая задача: теперь число года надо собрать не из последовательных цифр, а из любого (желательно наименьшего) количества одинаковых цифр.

Я придумал вот такую общую формулу для цифр А из диапазона [1;9]:

Черта означает, что цифры, находящиеся под чертой, объединяются в одно число, вот так:

Причём эту формулу можно немного упрощать для отдельных случаев:

Но можно и вообще отойти от «стандартного» решения:

Попробовал методом программного перебора найти решения для четырёх действий и последовательности из десяти одинаковых цифр. Ничего не нашлось, дальше мучить компьютер не стал :)

А теперь перейдём к нулям. Как говаривал один мой препод в институте, "Легко заметить, что..." и далее шло что-то очень сложное и непонятное. Так вот, легко заметить, что 0!=1. Это даёт нам возможность из нуля получить что-то, отличное от нуля. Но к четырём «стандартным» математическим действиям мы будем вынуждены привлечь ещё такое мудрое действие как вычисление факториала. Зато далее из суммы единиц можно «собрать» любое число любых чисел, а уже потом применять действия к этим числам. Поэтому с нулём задача сводится к поиску выражения, содержащего минимум символов, которое даёт в результате 2027. Например, такое:

А можно и так:

Разные числа из цифр 2027

Ну а теперь самое мозговыносительное.

Правила: используя любые математические действия, функции и преобразования, получить из последовательности цифр 2,0,2,7 выражение, значение которого точно равно числу слева. Не допускается явное использование каких-либо других цифр и чисел. Например, знак квадратного корня допустим, а вот кубический корень нет, так как в нём явно используется цифра 3.

Помимо вполне обычных действий сложения (+), вычитания (-), умножения (·) и деления (:), функций квадратного корня `sqrt(N)`, натурального `ln(N)` и десятичного логарифма `lg(N)` можно привлечь десятичную запятую/точку (.), инверсию знака (-), а также разные виды округления: обычное математическое `[N]`, вверх ` |~N~| ` и вниз `|__N__| ` (с отсечением дробной части). Ну и более сложные действия: возведение в степень `(x^y)`, обычный (!), двойной (!!) и другие кратные факториалы. Начальный ноль у десятичных дробей можно опускать: `.2 = 0,2`.

И в этот раз постарался обойтись без привлечения палочек-выручалочек в виде констант π и e. Ибо это нечестно, потому что из них одних можно сделать выражения для любых чисел, да и не нужно это. Даже, как оказалось, можно обойтись без логарифмов и всех этих округлений вверх-вниз.

Перед тем как искать решения, я сделал вот такие «заготовки»:

2

0

20

202

27

7

и ещё

В решениях от ИИ я подсмотрел несколько очень интересных триков:

Попытки привлечь ИИ

Честно признаюсь, в середине пути у меня возникла идея снова привлечь для этой задачи ИИ. Ну я и привлёк сначала DeepSeek, затем от безысходности ГигаЧат. И снова ни один не справился. DeepSeek честно пытался решить задачу, даже с моими подсказками смог накидать решения для первого десятка, и на этом сдох. Но при этом я подсмотрел у него великолепную идею применять кратные факториалы. Странно, но я даже не знал, что такое существует. Про одиночные и двойные факториалы я знал, а вот дальше… Те решения, которые придумал deepseek, я отмечу специальным значком (`{::}^✨`). Всё остальное я сам просчитал, можете не сомневаться :) В самом конце осталось два сложных числа, которые долго не давались – 59 и 82. И я снова попробовал привлечь ИИ для поиска этих конкретных значений. На одном из шагов удалось даже зациклить Deepseek, он стал выдавать по кругу одно и то же.

Сначала ДипСик зациклился

В конце концов я его прервал, он извинился и предложил мне программу на phyton, которая полным перебором должна была выдать решения для всех чисел от 0 до 100.

Затем сдался, но предложил программу

Я честно попробовал её запустить, но так и не дождался, пока она отработает. То ли виснет, то ли слишком много времени ей надо. ГигаЧат просто отказался, хотя и нагнал перед этим много текста.

 ГигаЧат тоже сдался

Поэтому я поигрался ими чуток, а затем сел за бумажку и калькулятор, и минут за 10 неспешного анализа нашёл нужные мне решения.

Пробовал привлечь Алису. Она долго думала (прям очень долго), но так ничего и не придумала. Или зависла, или ушла надолго и забыла про меня.

Размышления Алисы

Размышления Алисы

  • Анализирую детали запроса

Важно учесть ограничение на использование только цифр 2, 0, 2, 7 без повторов и изменения порядка. Нужно подобрать математические действия и функции, чтобы получить все числа от 0 до 100. Основной критерий — точное соответствие значениям без привлечения других цифр.

  • Генерирую выражения для чисел от 0 до 100

Требуется найти все числа от 0 до 100, используя только цифры 2, 0, 2, 7 в заданном порядке. Для этого строятся бинарные деревья с применением арифметических и унарных операций, включая факториал и степени. Важно сохранить порядок цифр и избежать лишних цифр в выражениях.

  • Оптимизирую код для генерации выражений

Требуется найти все числа от 0 до 100, используя только цифры 2, 0, 2, 7 в заданном порядке. Для этого строится бинарное дерево с применением арифметических и унарных операций, включая факториал и степени. Важно сохранить порядок цифр и избежать лишних цифр в выражениях.

  • Считаю выражения для чисел от 0 до 100
  • Оптимизирую код для генерации выражений

Требуется найти все числа от 0 до 100, используя только цифры 2, 0, 2, 7 в заданном порядке. Для этого строится бинарное дерево с применением арифметических и унарных операций, включая факториал и степени. Важно сохранить порядок цифр и избежать лишних цифр в выражениях. Рассматриваются различные подходы к реализации для повышения эффективности вычислений.

  • Считаю числа по оптимизированному алгоритму
  • Оптимизирую код для генерации выражений

Требуется найти все числа от 0 до 100, используя только цифры 2, 0, 2, 7 в заданном порядке. Для этого строится бинарное дерево с применением арифметических и унарных операций, включая факториал и степени. Важно сохранить порядок цифр и избежать лишних цифр в выражениях. Рассматриваются различные подходы к реализации для повышения эффективности вычислений.

  • Считаю выражения для чисел
  • Упрощаю алгоритм генерации выражений

Предыдущий подход оказался слишком медленным для четырёх токенов. Требуется найти более эффективное решение, сократив пространство поиска и упростив вычисления. Это позволит получить результаты быстрее без потери точности.

  • Тестирую упрощённый код генерации
  • Упрощаю алгоритм генерации выражений

Предыдущий подход оказался слишком медленным для четырёх токенов. Требуется найти более эффективное решение, сократив пространство поиска и упростив вычисления. Это позволит получить результаты быстрее без потери точности.

  • Запускаю упрощённый код для проверки
  • Оптимизирую алгоритм генерации выражений

Предыдущий подход оказался слишком медленным для четырёх токенов. Требуется найти более эффективное решение, сократив пространство поиска и упростив вычисления. Это позволит получить результаты быстрее без потери точности.

  • Считаю варианты выражений
  • Проверяю создание нового рабочего пространства

Требуется убедиться, что рабочее пространство доступно для выполнения кода. Это поможет избежать ошибок при обработке данных. После проверки можно будет запустить основной скрипт.

  • Запускаю тестовый скрипт для проверки
  • Проверяю создание нового рабочего пространства

Требуется убедиться, что рабочее пространство доступно для выполнения кода. Это поможет избежать ошибок при обработке данных. После проверки можно будет запустить основной скрипт.

  • Запускаю скрипт для поиска выражений
  • Проверяю работоспособность интерпретатора

Возникает ошибка при выполнении скрипта. Требуется убедиться, что среда работает, перед продолжением задачи. Если проблема повторится, ответ будет сформирован вручную.

  • Запускаю простой скрипт для проверки
  • Проверяю работоспособность интерпретатора

Требуется убедиться, что среда работает корректно, перед продолжением задачи. Если проблема повторится, ответ будет сформирован вручную. Сейчас выполняется тестовый скрипт для диагностики.

  • Запускаю тестовый скрипт для диагностики

Через 20 минут с ей написал:

похоже, что ты повисла или отвалилась по таймауту, ответа я так и не дождался

  • Алиса: Отвечаю в режиме интеллекта «Эксперт». Это может занять некоторое время…
  • Думаю
  • Разбираюсь в ситуации с ответом

Важно выяснить причину задержки и восстановить контекст задачи. Нужно подтвердить получение сообщения и уточнить, что именно пользователь имеет в виду под отсутствием ответа.

  • Оцениваю сложность задачи с цифрами

Требуется найти выражения из цифр 2, 0, 2, 7, дающие числа от 0 до 100. Нужно учесть все комбинации операций: сложение, умножение, факториалы, корни, округления. Важно соблюсти порядок цифр и избежать повторений в рассуждениях.

В общем, я не дождался. Слишком для неё сложно и слишком медленно она пока думает.

В конце концов эта задача была поставлена перед GPT Astra, и он с ней прекрасно и почти мгновенно справился. Помимо кратных факториалов он придумал использовать субфакториал, проценты и периодические дроби. И скажу больше – он меня просто перещеголял во многих решениях (которые я пометил значком 👍). Там, где я изгалялся со всякими логарифмами и округлениями вверх, Chat GPT нашёл красивые и простые решения. В общем, я обиделся и больше не буду расписывать, какой он умный :)

Короче, не только лишь все ИИ умные, но прогрессируют они со страшной скоростью. Как бы чего не вышло…

Первая сотня

На самом деле запись `20_2` выше некорректна, потому что в двоичной системе нет цифры 2. Здесь я придумал такое правило: запись `20_2` означает «надо взять число `20_10`, конвертировать его из десятичной в двоичную систему, а затем получившееся число `10100_2` представить, будто бы оно внезапно стало десятичным» :) в общем, должно быть `20_10=10100_2`, а у меня наоборот: `20_2=10100_10`. Ну вот так вот. Мир, основанный на правилах, а не на законах.

и так далее...

Большие числа

А можно задаться вопросом, какое самое большое число можно получить из цифр 2,0,2,7?

Теперь привлекаем факториалы и комбинаторику:

Ну а в полном факториале 5825 цифр:

Только вот ничего посчитать этим числом невозможно. По современным оценкам, число элементарных частиц в наблюдаемой Вселенной — порядка `10^80` (точнее, чаще всего приводят диапазон `10^78 ÷ 10^82`).

То есть факториал 2027 больше числа частиц во Вселенной на 5745 порядков. Это невообразимо огромное число.

Наверное, можно получить и ещё большие значения.

Малые числа

Некоторые интересные преобразования и соотношения

Число 2027 в разных системах счисления.

Кстати, переводить число из десятичной системы в любую другую очень легко. Делим в столбик наше число на основание нужной системы счисления, пока делится. Затем записываем остатки от деления задом наперёд. В системах с основанием больше `10` в качестве следующих за привычными цифрами `0123456789` используются «цифры» из латинских букв ABCDEFGHIJKLMNOPQRSTUVWXYZ. Поэтому не забываем конвертировать полученные остатки в «цифры» требуемой системы счисления. Этим способом можно записать числа до `36`-ричной системы включительно.

Например, хотим мы перевести число `2027` из десятичной системы в `27`-ричную. Делим `2027:27=75(2` ост`)`, `75:27=2(21` ост`)`, `2:27=0(2` ост`)`. Получили три остатка `2,21,2`.

`21` – это цифра L `27`-ричной системы. Записываем остатки задом наперёд и получаем `2L2`.

Кстати, для систем счисления с основанием больше `36`, десятичные цифры и латинские буквы заканчиваются, поэтому записывать такие числа становится не очень удобно. Есть несколько способов.

Например, рассмотрим, как можно записать число `2027_64`. Считаем остатки: `2027:64=31(43` ост`)`, `31:64=0(31` ост`)`. Записываем их задом наперёд: `31,43`. Обычно просто в скобках через запятую пишут десятичные значения цифр, а за скобками пишут основание.

Либо каждый разряд пишут в квадратных скобках.

Но можно взять за основу кодировку, используемую в Base64.

В ней используется специальный набор из `64` символов: по `26` больших и маленьких латинских букв, `10` обычных цифр и два знака + и /. В этой системе записи `2027` будет выглядеть так:

Можно придумать свою таблицу, в которой просто продолжать «генерировать» цифры после Z другими буквами, например, строчными латинскими, греческими, кириллическими и т.п. (хоть китайскими иероглифами :-) ). Я придумал вот такую:

При помощи этой таблицы можно записывать цифры до `180`-ричной системы включительно.

Но такая запись скорее всего вызовет путаницу, т.к. много символов выглядят одинаково, хотя с точки зрения компьютера имеют разные коды. Поэтому применять её можно только в чисто теоретических задачах или шутках. В общем, как мы любим :-).