Например
20*(-1+6)=100
Или
2+0-1^6=1
Факториалы и степени милостиво допускаются.
Комментарии (68)
Hellsy22
31.12.2015 22:23+1Я не дама-программист, но все равно с удовольствием потягаюсь с кем-нибудь.
Шаг первый — набросал простенькую программку в двадцать строк — получил 151 ответ даже без скобок и факториалов.
-2-0-1+6 == 3
-2-0+1+6 == 5
-2-0+1*6 == 4
-2-0**1+6 == 4
+2-0/1/6 == 2
+20/1+6 == 26
201/6 == 33.5
+2/01*6 == 12
и т.д. Кто даст больше?PatientZero
31.12.2015 23:07-133.5 не проходит условия
Hellsy22
31.12.2015 23:15+633.5 это число лежащее в пределах 1 — 100. В условии ничего не сказано про целые числа.
Keyten
01.01.2016 03:07+1любое число от 1 до 100
Как насчёт длины полукруга радиусом 1?hacklex
01.01.2016 11:47+12Я, конечно, понимаю, что совсем всё, скорее всего, и не получится, но…
ooprizrakoo
01.01.2016 18:58+1можно использовать спец.символы :)? = arctg(2°) * v16 — это можно скопировать мышкой 8)
просто к слову: пять лет назад я здесь на хабре написал, как сделал charmap.ru — онлайновую таблицу специальных символов :)mihaild
01.01.2016 21:02+4Всё очевидно не получится. Т.к. алфавит конечен, то формул не более чем счетно. А чисел континуум)
ankh1989
02.01.2016 10:06И вправду. Поэтому разумно потребовать в задаче найти все рациональные числа.
hacklex
02.01.2016 11:21Учитывая, что все рациональные числа – это все дроби с целым числителем и натуральным знаменателем, и что ниже для всех целых решение уже нашлось, все рациональные тоже могут и найтись… было бы весело.
SkidanovAlex
02.01.2016 23:25-1Это не доказательство, потому что вкладывать буквенные функции можно бесконечно много.
Mrrl
03.01.2016 00:03+1У каждой конкретной формулы длина конечна. И глубина вложенности конечна. Поэтому общее количество формул счётно.
SkidanovAlex
03.01.2016 03:37Я потому что читал очень внимательно, и подумал, что речь идет о целых числах.
PapaBubaDiop
31.12.2015 23:3411 как получилось?
jzha
01.01.2016 10:47+2Забавная задача, спасибо!
Для 11 можно так (2 + 0!)! -1 + 6hacklex
01.01.2016 11:37+1Или так:
jzha
01.01.2016 13:07+1Хм, а почему можно использовать степень 0.5 вне числа 2016?
Иначе голову ломать нечего — ясно, что для любого числа N > 0 всегда найдется x: (2016)^x = N.hacklex
01.01.2016 15:50+3Потому что радикал можно использовать без явного указания степени. Я честно расставил только значки, не прибегая к цифрам. Задача-то на перебор на синтаксическом уровне, семантику не затрагивает. Есть унарная операция sqrt? Отлично, берём.
А если уж решать совсем в кругу программистов, то можно и до читерства с побитовыми операциями дойти. В постановке задачи, к сожалению, не прозвучал конкретный, исчерпывающий базис допустимых операций. В результате можно спорить о допустимости радикалов, о том, общепринято ли ~ в качестве bitwise not, и так далее.jzha
01.01.2016 18:51+2Ясно. Да, базис допустимых операций не задан.
Для меня sqrt скорее функция одного аргумента, а не унарная операция. В таком контексте можно не ограничивать полет фантазии :)
Например, добавление к вашим замечательным примерам 2016 -> пи для поклонников Гаусса и Эйлера
khim
01.01.2016 17:18+3Этим задачкам больше лет, чем мне. Раньше «Наука и Жизнь» их каждый год публиковала. Корень в этих задачах обычно использовать допускается. Равно как и целую часть. А вот условие «любое число от 1 до 100» как раз новое и странное: обычно требовалось порождать все целые числа по порядку и победителем становился тот, кто добирался до наибольшего числа. В обзорах обычно «каверзные числа» потом публиковались, на которых «застряли» большинство участников.
Понятно что появление мощных компьютеров свело ценность этой задачи к нулю. Как задачка для собеседования — она ещё годится, но на конкурс — уже нет. Где-то в начале XXI века конкурс прекратили…Mrrl
01.01.2016 17:58Про целую часть не помню. Комбинациями корня, факториала и целой части можно, вероятно, из одной тройки получить любое число (хотя придётся слишком долго считать). А вот десятичная и девятеричная точки точно были.
PapaBubaDiop
01.01.2016 21:26Целая часть и радикал допускались. Условие было решить все года до текущего.
eduard93
01.01.2016 11:482^0-1+6 == 6
2*0+1+6 == 7
2+0*1+6 == 8
2+0+1+6 == 9
2*(0+1)*6 == 12
-2+0+16 == 14
-(2^0)+16 == 15
2*0+16 == 16
2^0+16 == 17
2+0+16 == 18
(2*(0+1))^6 == 64
saboteur_kiev
01.01.2016 13:37-2+0-1+6=3
-2+0+1+6=5
2+0-1+6=7
2+0+1*6=8
2+0+1+6=9
20-1*6=14
20+1-6=15
20-1+6=25
20+1*6=26
20+1+6=27
В общем тут пару сотен чисел набрать можно.
caveeagle
01.01.2016 11:19Без факториала 11 сделать невозможно.
PapaBubaDiop
01.01.2016 12:02Можно. Разрешается использовать операции x o b m
Mrrl
01.01.2016 17:49А кто это такие? xor, or и кто ещё?
encyclopedist
01.01.2016 18:31+1Либо шестнадцатеричные, восьмеричные, двоичные и ???
PapaBubaDiop
01.01.2016 21:30Да и м- модуль от системы счисления. В восьмеричной и шестеричной легко получить 11)
PapaBubaDiop
02.01.2016 12:23+4Нашел еще решение для 11 практически на одних плюсах.
caveeagle
02.01.2016 14:11+3Тогда я за строгую постановку задачи! =)
А то набросал скрипт на Питоне, для перебора всех не-читерских вариантов (скобки, базовые операторы, но без факториала). А там числа 11 нет.
И да, в новогоднюю ночь, в два часа ночи — кодить задачу, за которую даже не заплатят… Мне кажется, со мной что-то не так, доктор =) Всем хорошего Нового года!
Mrrl
01.01.2016 17:51А десятичная точка и периодическая дробь допускается? Например, .2^(0-1)+6?
PapaBubaDiop
01.01.2016 21:32Точка допускается, но в школьном варианте. То есть 0.2 легитимно. А Ваши программисткие Читы вне закона.
Mrrl
01.01.2016 23:200.(1) считается школьным вариантом? 29=2+sqrt(sqrt(0.(1)^(-6)))
khim
01.01.2016 23:36Периодическая дробь точно не допускалась (не помню точно почему), .2 не допускалось (всё-таки задачка родом из СССР, а не США), какие-то ещё ограничения были (чтобы пресечь «регулярные» решения, порождающие все числа формулами одинаковой структуры).
По-хорошему надо бы добраться до подшивки и посмотреть на оригинальную формулировку…Mrrl
02.01.2016 00:00Я помню там точку слева (.2) и точку сверху (эквивалент .(2)). Конечно, это могла быть другая серия задач с похожей формулировкой, но я, опять же, не помню, чтобы такие были.
ooprizrakoo
01.01.2016 18:26-120-v16 = v16
ooprizrakoo
01.01.2016 18:452^0^16 = 1
2+(0*16) = 2
-2+0+(-1+6) =3
20-16 = 4
2*0+(-1+6) = 5
2*0*1 + 6 = 6
2*0+1 + 6 = 7
2+0*1+6 = 8
2+0+1+6 = 9
v(20*(-1+6)) = 10
Lockal
01.01.2016 22:22+2Для примера установим, что 01 = 1, 016 = 16. Берём операции + ? * / fct (факториал) и pwr (возведение в степень) и полным перебором получаем ответы для 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 24, 25, 26, 27, 32, 36, 62, 64, 66, 100
Ответы0: (2 * (0 * (1 + 6)))
1: (2 + -(pwr(1, 6)))
2: (2 * (pwr(1, 6)))
3: (-(2 + 1) + 6)
4: (20 + (-16))
5: -(2 + -(1 + 6))
6: ((2 + (-1)) * 6)
7: (2 + ((-1) + 6))
8: (2 + (1 * 6))
9: (2 + (1 + 6))
10: (2 * ((-1) + 6))
12: (2 * (1 * 6))
13: (20 + -(1 + 6))
14: ((-2) + 16)
15: -(-(20 + 1) + 6)
16: (2 * (fct(0) + (1 + 6)))
18: (2 + 16)
19: (20 + -(pwr(1, 6)))
20: (20 * (pwr(1, 6)))
21: (20 + (pwr(1, 6)))
24: ((2 + (fct(0) + 1)) * 6)
25: (20 + ((-1) + 6))
26: (20 + (1 * 6))
27: (20 + (1 + 6))
32: (2 * 16)
36: (20 + 16)
62: -(2 + -(pwr((fct(0) + 1), 6)))
64: (pwr((2 * 1), 6))
66: (2 + (pwr((fct(0) + 1), 6)))
100: (20 * ((-1) + 6))Lockal
01.01.2016 22:59В частности, 82 можно получить как -ceil(factorial((-2+0) * (~1)) / tan(6)), где tan возвращает тангенс в радианах. Сомнительное достижение.
Mrrl
01.01.2016 23:24sqrt отличается тем, что его можно общепринятым способом написать в линейной формуле, не используя букв и цифр — знаком радикала. Число сочетаний так уже не запишешь — придётся писать в два этажа, либо использовать букву C.
mezastel
01.01.2016 23:40Вообще-то, раз уж вы разрешаете факториалы, могли бы получить 29 (и 27 по аналогии) как
29 = -20 + 1 + 6!!
Mrrl
02.01.2016 00:03Двойного факториала, к сожалению, в списке нет. Как и других комбинаторных штучек.
mezastel
02.01.2016 00:06Под «факториал», мне кажется, подходят двойные факториалы и субфакториалы.
Lockal
02.01.2016 13:07+1С бинарными +, *, /, pwr(возведение в степень) и унарными -, fct (факториал), sfct (субфакториал), dfct (двойной факториал) получается ряд для [0 — 30], 32, 35, 36, 38, [41 — 57], [62 — 69], 72, 85, 88, 90, 92, [94 — 100].
Ответы0: (2 * (0 * (1 + 6)))
1: dfct(2 + (-16))
2: (2 * (pwr(1, 6)))
3: (-(2 + 1) + 6)
4: (20 + (-16))
5: -(2 + -(1 + 6))
6: ((2 + (-1)) * 6)
7: (2 + ((-1) + 6))
8: (2 + (1 * 6))
9: (2 + (1 + 6))
10: (2 * ((-1) + 6))
11: (2 + sfct(-(fct(0) + 1) + 6))
12: (2 * (1 * 6))
13: (20 + -(1 + 6))
14: ((-2) + 16)
15: -(-(20 + 1) + 6)
16: (sfct(2) * 16)
17: (sfct(2) + 16)
18: (2 + 16)
19: (20 + -(pwr(1, 6)))
20: (20 * (pwr(1, 6)))
21: (20 + (pwr(1, 6)))
22: ((-2) + fct(-(fct(0) + 1) + 6))
24: fct(20 + (-16))
25: (20 + ((-1) + 6))
26: (20 + (1 * 6))
27: (20 + (1 + 6))
28: (-(20 * 1) + dfct(6))
29: -(20 + -(1 + dfct(6)))
30: (2 * dfct((-1) + 6))
32: (2 * 16)
35: (20 + dfct((-1) + 6))
36: (20 + 16)
38: (sfct(fct(2 + fct(0)) + (-1)) + (-6))
41: (-(2 + fct(0)) + sfct((-1) + 6))
42: ((-2) + sfct((-1) + 6))
43: (-(pwr(2, 0)) + sfct((-1) + 6))
44: sfct((-2) + (1 + 6))
45: (-(2 + 1) + dfct(6))
46: (-(2 * 1) + dfct(6))
47: -(2 + -(1 + dfct(6)))
48: dfct((2 + (-1)) * 6)
49: (2 + ((-1) + dfct(6)))
50: (2 + dfct(1 * 6))
51: (2 + (1 + dfct(6)))
52: (2 + (fct(0) + (1 + dfct(6))))
53: (fct(2 + fct(0)) + ((-1) + dfct(6)))
54: (fct(2 + 1) + dfct(6))
55: (fct(2 + fct(0)) + (1 + dfct(6)))
56: (dfct(2 + (fct(0) + 1)) + dfct(6))
57: (sfct(2 + (fct(0) + 1)) + dfct(6))
62: -(2 + -(pwr((fct(0) + 1), 6)))
63: -(sfct(2) + -(pwr((fct(0) + 1), 6)))
64: (pwr((2 * 1), 6))
65: (sfct(2) + (pwr((fct(0) + 1), 6)))
66: (2 + (pwr((fct(0) + 1), 6)))
67: (20 + ((-1) + dfct(6)))
68: (20 + dfct(1 * 6))
69: (20 + (1 + dfct(6)))
72: (fct(2 + (fct(0) + 1)) + dfct(6))
85: ((-20) + dfct(1 + 6))
88: (2 * sfct((-1) + 6))
90: (2 * (fct(0) + sfct((-1) + 6)))
92: (2 * (-(fct(0) + 1) + dfct(6)))
94: (2 * ((-1) + dfct(6)))
95: -(sfct(2) + -((fct(0) + 1) * dfct(6)))
96: (2 * dfct(1 * 6))
97: (sfct(2) + ((fct(0) + 1) * dfct(6)))
98: (2 * (1 + dfct(6)))
99: (dfct(fct(2 + fct(0)) + 1) + (-6))
100: (20 * ((-1) + 6))mezastel
02.01.2016 13:42Простите, но
1: dfct(2 + (-16))
это неверно… двойной факториал от -8 это «комплексная бесконечность», но никак не 1. Да и решение слишком сложное, что мешало1: pow(2, 0*16)
?
Lockal
02.01.2016 00:30Если трактовать задачу как «записать числа от 0 до 200, используя в формулах только цифры 2, 0, 1, 6 в этом порядке и знаки препинания, в том числе с повторением», то можно выйти на любое целое число через «~-» и «-~». -~2016 = 2017, ~-2016 = 2015, ~-~-2016 = 2014 и т. д.
mezastel
02.01.2016 00:34Боюсь такого в задаче нет. Зато есть
Факториалы и степени милостиво допускаются.
OLS
02.01.2016 00:36+1а может в сторону универсальной формулы посмотреть?
если вдруг кто придумает как от второго логарифма избавиться…:
-log2(log2(0+vvvvvv...vvvv16))
где корень повторяется 3, 4, 5,… и т.д. раз для получения чисел 1, 2, 3,… соответственноOLS
02.01.2016 01:14+4UPD:
-log2(ln(0+1^6*vvvvvv...vvvve))
где корень повторяется 1, 2, 3, … и т.д. раз для получения чисел 1, 2, 3, … соответственно
путь, конечно, экстенсивный, да и цифры «0», «1», «6» — лишние,
но по формальным признакам — условию задачи соответствуетwithkittens
02.01.2016 01:33По формальным признакам оба варианта не подходят: в первом случае у вас задействована лишняя двойка, во втором — лишнее
e
.hacklex
02.01.2016 02:32+3Лишнее е – это не цифра. Буковки логарифма иначе тоже «лишние», и плохо въезжают в авторское «знаки и скобки». Если же проблема именно в константе – да пожалуйста:
Не ошибся вроде?hacklex
02.01.2016 02:38Угу, не ошибся. Сижу, любуюсь. OLS однозначный победитель. Красиво и в общем виде. Для всех целых сразу. Для всех отрицательных, очевидно, достаточно убрать минус. Решение – пушка.
jzha
02.01.2016 09:50Да, OLS здорово придумал. Хотя, наверное, log и прочие функции не поразумевалось использовать, его решение лучшее. Да еще и без изменений на несколько последующих лет распространяется.
hacklex
02.01.2016 11:00+2Ну, раз пошла такая пьянка – остаётся вспомнить про функцию sign и закрыть проблему. С её помощью двойка получается из любых двух первых цифр ( либо для ).
Единица, нужная для , получается из любых оставшихся цифр (как минимум две) перемножением , если нулей нет, либо суммой двух произведений, в одном из которых нуль есть. Если остались одни нули – пользуемся тем, что 0! = 1.
Теперь решение распространяется на решительно все последующие годы.
… фух…
Mrrl
03.01.2016 01:25+2Тогда можно попробовать так:
n/k = logln(vvv...vexp(20))(ln(vvv...vexp(16)))
Ведь логарифм по основанию, меньшему 1, не запрещён?hacklex
03.01.2016 07:06Вовсе нет!
Вот и получилось решение для всех рациональных чисел. А если с сигнумами – так ещё и не зависящее от года, достаточно, чтобы цифр было более одной.
Да, кстати, множество алгебраических чисел же вроде тоже счётно?)
vmarunin
02.01.2016 02:26Ну если можно использовать функцию Эйлера, то 2=2 2=0!+1 2=phi(6) и готовы 2 двойки
Если вдруг картинка не вставится, то вот ссылка
PS А может есть способ сделать из 0 и 1 шестёрку? Тоже сработает
OlegFX
Чёрт, сначала порешал, а только потом заметил, что: