Используя наши знакомые математические символы: +, x, круглые скобки и любое рациональное число, легко создавать выражения, которые оценивают до некоторого желаемого числа. Например: 1+(2x3)=7
, (1+2)+(3x6.5)=22.5
и так далее. Достаточно скучно.
В этой проблеме, мы будем использовать новый оператор: ±
. Использование ±
выражения в выражении означает, что вам нужно вычислить выражение, заменив символы ±
's' +
или -
всеми возможными способами, и вернуть набор всех возможных значений. Например:
1±2±3 = {-4,0,2,6}
потому что1±2±3
может быть любой из1+2+3
,1+2-3
,1-2+3
и1-2-3
и их значения6,0,2,-4
соответственно.(±2)x(2±3) = {-10,-2,2,10}
по тем же причинам.
Теперь, как выясняется, для любого множества различных действительных чисел, то можно создать выражение с +
, x
, (
, )
, ±
, и действительные числа , которое вычисляется в данном наборе.
задача
Ваша задача состоит в том, чтобы написать программу или функцию на языке по вашему выбору, который принимает последовательность (список / массив / любой удобный формат) целых чисел и выводит выражение (в виде строки) , состоящей из +
, x
, (
, )
, ±
, и рациональных чисел который оценивает набор заданных чисел.
- Обратите внимание, что точный символ
±
не имеет значения; Вы можете использовать любой другой символ по вашему выбору, если он отличается от других символов, которые вы используете. Но вы должны указать, какой персонаж вы используете в своем представлении. - Входные данные могут состоять из десятичных аппроксимаций (с достаточной точностью) используемых рациональных чисел.
- Ввод и вывод могут быть приняты любым из стандартных способов.
- Стандартные лазейки запрещены.
- Вы можете предположить, что данные целые числа будут различаться и предоставляться в порядке возрастания.
- Вывод может содержать пробелы и переводы строк.
Критерий победы
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Примеры
Вход | Возможный вывод ------------- + ----------------------------- [1,2,3] | 2 ± 0,5 ± 0,5 [-7, -3,1,21] | (1 ± 2) х (3 ± 4)
Идея взята из вопроса в Турнире городов, осень 2015 .
источник
Ответы:
Python 2 , 56 байт
Попробуйте онлайн!
?
Означает±
. Пример использования:Идея состоит в том, что мы можем взять выражение
E
и присоединить новое значениеh
к его набору значений(.5±.5)*(E+-h)+h
.источник
+-h
, а не только-h
? То есть, почему бы не сделать+
a-
и удалить то,-
что в данный момент находится в программе?-
оператор в выражении.Haskell , 52 байта
Попробуйте онлайн!
Использует
?
для±
. Пример:Функция
shows
делаетshows a b=(show a)++b
, уловка, которую я узнал от Линн.источник
Haskell , 58 байт
Использование
#
для±
, поскольку это на один байт меньше.f
берет список целых чисел и возвращает строку.Результат имеет вид
n+(.5#.5)x(rest)
, гдеn
находится первый элемент списка иrest
является представлением всех остальных сn
вычитанием из каждого.Попробуйте онлайн!
источник
Желе , 29 байт
Печатает v + (0.5¤0.5) × (i 1 + (0.5¤0.5) × ((i 2 + (0.5¤0.5) × (... (i n ) ...))), где v - первое число в входной массив, а i n - это n- я инкрементная разница между элементами входного массива.
Попробуйте онлайн!
Как?
источник
05AB1E , 25 байтов
Попробуйте онлайн!
объяснение
К сожалению, построение выражения справа заканчивается тем же счетом байтов
0¸«¥¤s¨RvX;Dy"ÿ+(ÿ±ÿ)*(ÿ)
. 8 байтов, использованных для настройки, являются здесь большими отходами.источник
Haskell, 54 байта
знак + - есть
'?'
. пример:источник
JavaScript (ES6),
5651 байтОсновано на формуле @ Джонатана Аллана.
@
обозначает±
.источник