Ваша задача - написать программу, которая на входе n выводит минимальное выражение каждого числа от 1 до n по порядку. Самая короткая программа в байтах побеждает.
Минимальное выражение объединяет 1 с сложением и умножением, чтобы получить заданное число, используя как можно меньше 1. Например, 23
выражается как 23=((1+1+1)(1+1)+1)(1+1+1)+1+1
с одиннадцатью, что минимально.
Требования:
- Программа должна принимать в качестве входных данных положительное натуральное число n.
- Вывод должен быть в следующем формате:
20 = ((1+1+1)(1+1+1)+1)(1+1)
- Ваш вывод может не иметь лишних скобок, как
8 = ((1+1)(1+1))(1+1)
. - Знак умножения не
*
является обязательным. - Пробелы не являются обязательными.
- Вам не нужно выводить все возможные уравнения для данного значения: например, у вас есть выбор для вывода
4=1+1+1+1
или4=(1+1)(1+1)
. Вам не нужно выводить оба. - Самая короткая программа (в байтах) на каждом языке выигрывает.
1 = 1 2 = 1 + 1 3 = 1 + 1 + 1 4 = 1 + 1 + 1 + 1 5 = 1 + 1 + 1 + 1 + 1 6 = (1 + 1 + 1) (1 + 1) 7 = (1 + 1 + 1) (1 + 1) + 1 8 = (1 + 1 + 1 + 1) (1 + 1) 9 = (1 + 1 + 1) (1 + 1 + 1) 10 = (1 + 1 + 1) (1 + 1 + 1) + 1 11 = (1 + 1 + 1) (1 + 1 + 1) + 1 + 1 12 = (1 + 1 + 1) (1 + 1) (1 + 1) 13 = (1 + 1 + 1) (1 + 1) (1 + 1) + 1 14 = ((1 + 1 + 1) (1 + 1) + 1) (1 + 1) 15 = (1 + 1 + 1 + 1 + 1) (1 + 1 + 1) 16 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) 17 = (1 + 1 + 1 + 1) (1 + 1) (1 + 1) + 1 18 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) 19 = (1 + 1 + 1) (1 + 1 + 1) (1 + 1) + 1 20 = ((1 + 1 + 1) (1 + 1 + 1) + 1) (1 + 1)
Вот еще несколько тестов: (помните, что допускаются и другие выражения с таким же числом единиц)
157=((1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1
444=((1+1+1)(1+1+1)(1+1)(1+1)+1)(1+1+1)(1+1)(1+1)
1223=((1+1+1)(1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)(1+1+1+1+1)+1+1+1
15535=((((1+1+1)(1+1+1)(1+1+1)(1+1+1)+1)((1+1+1)(1+1)+1)+1)(1+1+1)+1)(1+1+1)(1+1+1)+1
45197=((((1+1+1)(1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1)+1)(1+1+1)(1+1)(1+1)+1)(1+1+1+1+1)(1+1+1)+1+1
Удачи! - Черепаха 🐢
code-golf
math
arithmetic
Черепаха
источник
источник
n=20
) и 2) в начале вы говорите, что должна быть выведена целочисленная сложность, отличная от уравнения, но вы не включаете ее в любой из примеров, кроме самого первого.Ответы:
Pyth, 60 байт
демонстрация
Онлайн-компилятор может достигать 1223 до истечения времени ожидания благодаря автоматическому запоминанию функций Pyth.
В сокращенном виде,
При этом используется рекурсивная функция
'
, которая вычисляет все возможные продукты и суммы, которые могут дать желаемый результат, находит самую короткую строку с каждой последней операцией, затем сравнивает их по1
количеству и возвращает первую.Он использует вспомогательную функцию,
y
которая заключает выражение в скобки, только если его нужно заключить в скобки.В автономном режиме я запускаю программу с вводом
15535
, и она почти завершена. Результаты печатаются постепенно, поэтому легко увидеть прогресс.Конечные строки вывода:
В сокращенной записи,
источник
CJam,
1051029896 байтПопробуйте онлайн в интерпретаторе CJam .
Тестовый забег
Онлайн переводчик слишком медленный для больших тестовых случаев. Даже с помощью интерпретатора Java более крупные тесты будут занимать много времени и требовать значительного объема памяти.
Если бы у нас было достаточно времени, он бы подготовил эти решения для следующих тестовых случаев:
источник
Юлия, 229 байт
Это на самом деле довольно быстро. Назначение функции
f
и ее выполнение@time f(15535)
дает вывод (только две последние строки)и для
@time f(45197)
, это даетИтак, что делает код? Простой -
C
содержит текущуюC
единицу для числа,K
является массивом индикаторов, отслеживающим, является ли выражение, по сути, суммой или произведением, для целей заключения в скобки, иE
содержит самоE
выражение. Работая в направлении отs=1
до кn
, код ищет минимальное представление числаs
в терминах более низких значений, ища либо сумму, либо произведение. Если это продукт, то он проверяет два компонента и заключает их в скобки, если они являются суммами. Эта проверка выполняется в функцииF
, чтобы сохранить байты (потому что она должна быть сделана дважды, для двух факторов).источник