Изменить: я буду публиковать более новую версию этого вопроса в meta-golf
ближайшее время. Оставайтесь на связи!
Правка № 2: я больше не буду обновлять вызов, но оставлю его открытым. meta-golf
Версия доступна здесь: /codegolf/106509/obfuscated-number-golf
Фон:
Большинство чисел могут быть написаны только с 6 различными символами:
e
(Константа Эйлера)-
(Вычитание, а не отрицание)^
(Возведение)(
)
ln
(Натуральный логарифм)
Например, вы можете преобразовать мнимое число, i
используя это уравнение:
(e-e-e^(e-e))^(e^(e-e-ln(e^(e-e)-(e-e-e^(e-e)))))
Цель:
Для любого целого числа k
любым разумным способом выведите кратчайшее возможное представление этого числа, используя только эти 6 символов.
Примеры:
0 => "e-e"
1 => "ln(e)"
2 => "ln(ee)"
// Since - cannot be used for negation, this is not a valid solution:
// ln(e)-(-ln(e))
-1 => "e-e-ln(e)"
Примечания:
- Конечные скобки учитывают общее количество символов.
ln(
учитывается только как 1 символ- Все остальное считается за 1 символ.
n^0=1
- Порядок операций применяется
- Скобки умножение является приемлемым, например
(2)(8)=16
,2(5)=10
иeln(e)=e
. ln e
недействительно, вы должны сделатьln(e)
code-golf
math
number
number-theory
Джулиан Лахниет
источник
источник
ln(ee...e)
) - лучший способ изобразить позитивы. Редактировать: нет, это не так.ln(e^(ln(eeeee)ln(eeee)))
лучше для 20ln(eeee)^ln(ee)
короче, чемln(eeeeeeeeeeeeeeee)
на 16Ответы:
Python 3, 402 байта
Пример использования:
Обратите внимание, что хотя формат вывода может не отражать его, код правильно считает все длины в соответствии со спецификациями вопроса.
Это тупой грубый удар через все возможные длины струн. Затем я использую некоторые замены, чтобы Python мог это оценить. Если он равен тому, что мы хотим, я также проверяю, чтобы исключить унарные отрицательные знаки, проверяя AST.
Я не очень хорош в игре в гольф на Python, так что вот полуголфый код, если кто-то хочет помочь!
источник