Ваша задача - построить натуральное число, используя наименьшее количество единиц и только операторов +
или -
. Например, число семь может быть написано 1+1+1+1+1+1+1=7
, но оно также может быть написано как 11-1-1-1-1=7
. Первый использует 7
те, в то время как последний использует только 6
. Ваша задача состоит в том, чтобы вернуть минимальное количество единиц, которые можно использовать, если ввести некоторое натуральное число n
,.
Это код гольфа, поэтому выигрывает самый короткий действительный код в байтах.
Контрольные примеры
Вход => Выход
0 => 2 (since 1-1=0)
7 => 6
121 => 6
72 => 15
1000 => 7
2016 => 21
code-golf
number-theory
codeputer
источник
источник
VALID OUTPUTS
. Это ваш выбор, но обычно люди предпочитают жирный шрифт или курсив, а не ЗАГЛАВНЫЕ БУКВЫ (они заставляют его выглядеть как крик вместо акцента). Жирным шрифтом**bold text**
и курсивом*italics text*
. Вы также можете использовать### Text
для жирного текста. В любом случае, добро пожаловать в PPCG!Ответы:
JavaScript (ES6),
12712687 байтДолжно работать примерно до 10
1415, после чего вы начинаете работать с целочисленными ограничениями JavaScript. Объяснение:Это использует
n*9
магию дважды; во - первых, это дает мне длину следующего репьюнитом, во- вторых, если первые две цифрыn*9
являются55
или выше, то мы должны вычестьn
из этого следующего репьюнитом, в противном случае мы должны вычесть предыдущее репьюнитом (который рассчитывается путем вычитания 1 и деление на 10). Это должно работать до 10 15 .источник
Pyth,
1916 байтТестирование
Алгоритм грубой силы. Необходимые строки генерируются путем взятия всех списков, элементы которых имеют
['+', '-', '']
длину, равную числу тестируемых единиц, добавлением 1 к каждому и конкатенацией к одной строке. Эти строки затем оцениваются и сравниваются с входными данными. Это повторяется до тех пор, пока не будет найдена успешная строка.Некоторые строки с ведущими
+
или-
проверены, но это не проблема. Это было бы, если бы вход был отрицательным, хотя.Он может работать до длины 9, пока не станет слишком медленным.
Объяснение:
источник
JavaScript (ES6), 92 байта
объяснение
Рекурсивная функция. Это генерирует все возможные перестановки
1
s, разделенные либо+
,-
либо ничем. Она делает это путем приращения номера базовой-3, превращая ее в массив цифр, преобразование каждой цифры ,0
чтобы-
,1
чтобы+
и2
в пустую строку, а затем объединить их вместе с1
с. Результирующая строкаeval
d является оператором JavaScript, который возвращает результат уравнения.Поскольку операторы объединяются с
1
s между (как+1+1+1+
), естьlength - 1
1
s. Первый оператор игнорируется (потому что+1
=1
,<nothing>1
=1
и это число, поэтому никогда не будет лидирующего0
для-
), а последний оператор также игнорируется (путем добавления.0
к уравнению).Более высокая выходная версия, 96 байт
Другая версия не может возвращать выходные данные выше ~ 10 из-за предела стека рекурсивных вызовов. Эта версия использует цикл for вместо рекурсии, поэтому может возвращать выходные данные до ~ 33. Количество времени увеличивается экспоненциально, поэтому я не рекомендую его тестировать.
источник