Новогодний арифметический конкурс 2022
Это конкурс должен был объявлять придумавший его Harry, но он почему-то передумал. Поэтому я за него ))
Вот условия конкурса:
Пока некоторые рисуют елочки, предлагаю заняться более умственной работой :)
Новогодний коннкурс на 2022 год (который, кстати, находится как раз посредине между двумя простыми годами — 2017 и 2027).
Задача — представить число 2022 с помощью как можно меньшего количества одинаковых цифр.
Можно использовать скобки, арифметические операции, возведение в степень, квадратный корень, факториал или двойной факториал (напомню, что двойной факториал для нечетного — произведение всех нечетных, не превышающих данное число, для четного — соответственно четных). Две номинации - только для "скобки, арифметические операции, возведение в степень", и вторая — разрешено всё выше перечисленное.
И еще — то же самое для ряда цифр 1234567890 и 9876543210 - постараться по возможности получить 2022 для всех подпоследовательностей — ну, там, для 1234567, 12345678 и так далее. Ноль не должен быть тривиальным (например, в конце +0)!
Поскольку конкурс чисто развлекательный, пусть победителя определит голосование за ответы. Понятно, что чем меньше цифр использовано — тем круче решение. Не менее важна и эстетика решения.
Чтобы было понятнее, что требуется — вот несколько решений для 2021 года:
1-(1+1)*(1-11111)/11
((999+99/9)*(9+9)+9)/9
((9+9)/9)^(99/9)-9-9-9
((9+9)/9)^(99/9)-sqrt(9)*9
((9-8)*7*6+5)*43
1*2+3+4*(56+7)*8
Срок конкурса ограничим 5 днями, чтобы не затягивать. По договоренности, Harry участвует вне конкурса, чтобы не могло быть никаких претензий, что он заранее долго думал. Т.е. он может участвовать, но не может быть объявлен победителем.
От себя объявляю приз победителю в 400 баллов, но приглашаю спонсоров поучаствовать и наградить понравившихся участников и решения.
Ответы (14 шт):
Кратчайшее решение: 9 двоек
Единицы:
(11111-1)/11*(1+1)+1+1
(1+1)^11-(1+1)*11-(1+1)*(1+1)
Двойки:
2222-222+22
2^(22/2)-22-2^2
Тройки:
(333+3+3^(3-3))*(3*3-3)
Четверки:
(444+44+4*4)*4+4+√4
pwsh
# единственный ноль
[int]"$($$=0)$(++$$)$$$(--$$)$$$(++$$)$$$$"*(++$$)
# единственная единица
[int]"$($$=1)$$$(--$$)$$$(++$$)$$$$"*(++$$)
# ещё вариант с единицей (трюк с бинарной системой счисления)
[int][Convert]::ToString("$($$=1)$$$$", ($$=$$+$$))*$$
# совсем без цифр
[int]"$($$=!!{}+!!{})$$$([int]!{})$$$$"
js
// шесть единиц (всё тот же трюк с бинарной системной счисления)
console.log(Number(11).toString(1+1)*(1+1));
// пять четвёрок (трюк с троичной системой счисления)
console.log(Number((4<<4)-Math.sqrt(4)).toString(4-(Math.log(4)^{})));
// восемь шестёрок
console.log((66<<6)/(Math.sqrt(6)^{})-((6<<6-(Math.sqrt(6)^{}))-6));
// пять восьмёрок
console.log(((8<<8)-8*Math.sqrt(8)-Math.sqrt(8))^{});
// семь девяток
console.log((Math.sqrt(9e9|9)/(9+9/9)-Math.sqrt(9))^{});
// "горбатая" последовательность (все цифры)
console.log(1e3*2+5*4+7-6+9-8);
// число Непера и π (до кучи)
console.log((Math.E^{})**((Math.E*Math.PI+Math.E)^{})-((Math.PI<<Math.E)*(Math.E^{})+Math.E^{}));
UPD
Небольшое дополнение (к решению @avp) по поводу систем счисления. В принципе, можно использовать любую из них, чтобы получить заветное 2022, совершая различные операции исключительно над каким-то одним числом (пусть той же двойкой). В троичной системе 2022 "соответствует" 62, получить которое можно, скажем, так (~2-2)*~2*2*2+2; в системе счисления по основанию четыре - 138, т.е. (~2<<2)**2+(~2+~2) и т.д.
Только из одиночных цифр 2
В шестнадцатиричной системе счисления:
((2 << 2 << 2) << (2 << 2)) + (2 << 2 << 2) + 2 == 0x2022
В десятичной:
(2 << ((2 << 2) + 2)) - (2 << 2 << 2) + (2 << 2) - 2 == 2022
От 0 до 9:
f=n=>n<2?1:n*f(n-1)
F=n=>n<2?1:n*F(n-2)
v=Math.sqrt
console.log(((f(0)<<F(f(0)<<f(0)<<f(0)))-f(0)-f(0)-f(0)<<f(0)<<f(0)<<f(0))-f(0)^f(0))
console.log((1+1)**11-(11+1+1)*(1+1))
console.log(2222-222+22)
console.log((333*3+3*3+3)*f(3)/3)
console.log((4444-444+44)/F(4)*4)
console.log(F(55/5)/5-55-5^5)
console.log(6**6/F(6)*(66&6)+66+6+6)
console.log(F(7)*F(7)/7+77*7-77-7-7-7/7)
console.log(8888-888+88>>(8/8+8/8))
console.log(f(9)/F(9)*9/v(9)|999&~9)
.as-console-wrapper.as-console-wrapper { max-height: 100vh }
// Да кому в 2022 нужны эти цифры?!
console.log( +(!+[]+!![]+[])+(+[]+[])+(!+[]+!![]+[])+(!+[]+!![]+[]) );
// Использованы все цифры
console.log( 0.123e4+(5^6)+789 );
console.log( +([]+(0*1+2+3+4+5+6)+(7^(8+9))) );
console.log( 2*(10+(9-8+3*4)*(5+6)*7) );//чуть не по порядку
// Шесть двоек
console.log( 2222-2e2 );
// Просто баловство
// (может, кого натолкнет на новые мысли)
console.log( 123456 ^ 124326 );
console.log( 123456789 ^ 123456243 );
console.log( 012345 ^ ([]+(6*8)+67) );
//СЕМЬ ЧЕТВЕРОК
console.log(4 * (4 ** 4 * Math.sqrt(4) - 4 - Math.sqrt(4)) - Math.sqrt(4));
Раз все равно вне конкурса, то формальности соблюдать не буду :)
Внизу табличка. Слева — то, чего удалось достичь с использованием факториалов, степеней и так далее, справа — только арифметика.
Что касается последовательностей 123... и 987... — то лучшее, что смог, это начать с 123456, и то с использованием степени и факториала; 1234567 и далее — чистая арифметика.
В обратном направлении — 98765 и 987654 — с факториалами, бифакториалами и радикалами; чистой арифметикой удалось только с 9876543.
Понравилась идея avp, сам у себя попросил разрешения использовать битовые операции, сдвиги и остаток от деления, и сам себе разрешил.
Удалось улучшить результат для всех цифр, кроме 2 и 6. Для последовательностей удалось получить 9876. Лучше ничего не получается.
Еще мне понравилась идея Qwertiy c нулями. Объединив ее со сдвигами avp, удалось обойтись десятью нулями (без битовых операций — двенадцатью, но я уже не стал включать этот результат).
Потом я разрешил себе побитовое отрицание, улучшил результат для 2 и добился последовательности 12345... но... Мне эти результаты представляются сомнительными — в том плане, что их смешение с арифметикой, вообще говоря, зависит от используемой при расчетах архитектуры. Поэтому, если бы я участвовал на общих основаниях, я бы не стал публиковать результаты с битовыми операциями. Математика есть математика :)
P.S. Оставляю за собой право дополнять/исправлять ответ :)
P.P.S. Возможно, где-то налепил лишних скобок. Ну плохо я помню все эти приоритеты... Да и не привязано задание к языку программирования.
Если использовать только арифметические оперции и возвденеие в степень
Еденицы (10 шт)
(1 + 1)**11 - (11 + 1 + 1)*(1+1)
Двойки (8 шт)
2**(22/2) - (22 + 2 + 2)
Тройки (10 шт)
3 * (3**(3 + 3) - (3**3 + 3**3 + 3/3))
Далее решения однотипные, которые включают 11 степень двойки и дальнейшие манипуляции, которые приводят к результату <= 12 цифр
Четверки (12 шт)
((4 + 4)/4)**(44/4) - ((44 * 4) / (4 + 4) + 4)
Пятерки (10 шт)
((5 + 5)/5)**(55/5) - (5 * 5 + 5/5)
и т.д.
Поискал совпадения в pi, если интересно кому, то здесь первое попадание
<re.Match object; span=(16335, 16339), match='2022'>
UPD Здесь буду добавлять найденные варианты в течении 2022 года
Последовательность 9876543210 (с сохранением порядка)
(9*8*7-6-5)*4 + (3+2)*10
Последовательность 0123456789
1023*4 - 5*6*(78-9)
Последовательность 01234567
2045 - (5*7 - (6+4+3-1))
Последовательность 0123456
2034 - 1 - 5 - 6
насколько я понял в задаче указано как можно меньшего количества одинаковых цифр
такой вариант вполне подойдет
2022 = 1*2*3*337
все просто и нет не одной одинаковой цифры.
и еще как вариант
d = 1 * 2 * 3 * (pow(2, 3)*(pow(2, 3)*5+2)+1)
print(d)
Поскольку новый конкурс заводить не хочется, просто делюсь тем, что накропал для 2023 года на тех же условиях (в этот раз — без битовых операций).
Update
И как я пропустил такой шедевр?! 77%7!
А еще ~(6*6!!)*~6

