Вызов
Вот задача, вдохновленная известным британским ТВ-шоу Countdown. Задача должна быть довольно ясной, даже не зная об игре, но не стесняйтесь просить разъяснения.
И если вам интересно увидеть клип этой игры в действии, посмотрите этот клип YouTube. В нем есть замечательный покойный Ричард Уайти в 1997 году.
Вам предоставляется 6 чисел, выбранных случайным образом из набора {1, 2, 3, 4, 5, 6, 8, 9, 10, 25, 50, 75, 100} и случайного целевого числа между 100 и 999. Цель состоит в том, чтобы использовать шесть заданных чисел и четыре общие арифметические операции (сложение, вычитание, умножение, деление, по всем рациональным числам) для создания цели - или как можно ближе к любой из сторон. Каждый номер может использоваться только один раз максимум, в то время как каждый арифметический оператор может использоваться любое количество раз (включая ноль.) Обратите внимание, что не имеет значения, сколько чисел используется.
Напишите функцию, которая принимает целевой номер и набор из 6 чисел (может быть представлена как список/коллекция/массив/последовательность) и возвращает решение в любой стандартной числовой нотации (например, infix, prefix, postfix). Функция должна всегда возвращать ближайший возможный результат к цели и должна работать не более 1 минуты на стандартном ПК. Заметим, что в случае, когда существует более одного решения, достаточно одного решения.
Примеры:
-
{50, 100, 4, 2, 2, 4}, цель 203
например 100 * 2 + 2 + (4/4) (точнее)
например (100 + 50) * 4 * 2/(4 + 2) (точнее) -
{25, 4, 9, 2, 3, 10}, цель 465
например (25 + 10 - 4) * (9 * 2 - 3) (точнее) -
{9, 8, 10, 5, 9, 7}, цель 241
например ((10 + 9) * 9 * 7) + 8)/5 (точный) -
{3, 7, 6, 2, 1, 7}, цель 824
например ((7 * 3) - 1) * 6 - 2) * 7 (= 826; выключено на 2)
Правила
Кроме указанных в заявлении проблемы, никаких дополнительных ограничений нет. Вы можете написать функцию на любом стандартном языке (стандартный ввод-вывод не требуется). Цель всегда состоит в том, чтобы решить задачу с наименьшим количеством символов кода.
Говоря это, я могу не просто принять ответ с кратчайшим кодом. Я также буду смотреть на изящество кода и временную сложность алгоритма!
Мое решение
Я пытаюсь найти решение F #, когда я нахожу свободное время, - опубликую его здесь, когда у меня есть что-то!
Формат
Пожалуйста, разместите все ответы в следующем формате для удобства сравнения:
Язык
Количество символов:
Полностью запутанная функция:
(code here)
Функция Clear (идеально прокомментированная):
(code here)
Любые заметки об алгоритме/умных сочетаниях, которые он принимает.