Mathemania Specs:
Каждый фрагмент кода Mathemania начинается с цифры 2
. Из 2
, вы можете сделать следующие операции:
e
: Экспонирование. По умолчанию этой команды возводится в квадрат числа.f
Факториал. По умолчанию эта команда использует один факториал для числа (using f on 2 = 2! = 2
).r
: Root. По умолчанию этой команды вводится квадратный корень из числа.c
Функция потолка.l
Функция пола.
Чтобы сгенерировать число в Mathemania, вы должны связать воедино эти команды, которые выполняются слева направо над номером 2
.
Примеры:
ef = (2^2)! = 4! = 24
rl = floor(sqrt(2)) = floor(1.4...) = 1
er = sqrt(2^2) = sqrt(4) = 2
efrrc = ceil(sqrt(sqrt((2^2)!)))
= ceil(sqrt(sqrt(24)))
= ceil(sqrt(4.89...))
= ceil(2.21...)
= 3
В e
, f
и r
команды могут быть изменены с помощью дополнительных команд Mathemania (которые также начинают с в 2
качестве «базового» номера) для создания различного возведения в степени, факториалов и корней, помещая скобки после измененной функции и размещения команд Mathemania внутри него.
Например, чтобы кубизировать число, а не возводить его в квадрат, вы можете поместить команду для 3
after e
следующим образом:
e(efrrc) -> cube a number, "efrrc" = 3
ПРИМЕЧАНИЕ: для нашей цели команда factorial ( f
) начинается с 2
одного факториала. Так что если вы это сделаете f(efrrc)
, это будет оцениваться с двойным факториалом, а не с тройным факториалом.
Для n
-факториалов (например, двойные факториалы = 2-факториал, тройной факториал = 3-факториал и т. Д.) Базовое число умножается на число, которое n
меньше его и n
меньше этого, и так далее, пока окончательное число не может быть вычитается, n
не становясь 0
или отрицательным.
Например:
7!! = 7 * 5 * 3 * 1 = 105 (repeatedly subtract 2, 1 is the last term as
1 - 2 = -1, which is negative)
9!!! = 9 * 6 * 3 = 162 (repeatedly subtract 3, 3 is the last term as
3 - 3 = 0, which is 0)
Для получения дополнительной информации см. Здесь .
Вы можете вставить его куда угодно, и Mathemania будет рассматривать его как одну функцию:
e(efrrc)rc = ceil(sqrt(2^3))
= ceil(2.82...)
= 3
Вам также разрешено вкладывать их друг в друга:
e(e(e)) = e(4th power)
= (2^4)th power
= 16th power
Чтобы получить интерпретатор кода Mathemania, нажмите здесь (ура, @ BradGilbertb2gills!)
Задача:
Ваша задача - создать программу, которая при получении положительного целого числа в n
качестве входных данных генерирует программу Mathemania, которая при выполнении возвращает n
.
Тем не менее, программа Mathemania что вы порождающая должна быть как малые (golfed) , насколько это возможно, и ваш итоговый результат определяется суммой числа байт в сгенерированных программах Mathemania образца, которые являются целыми числами 10,000
в 10,100
. Самый низкий балл побеждает.
Правила и характеристики:
- Ваша программа должна вывести действительную программу Mathemania для любого положительного целого числа, но только числа между
10,000
и10,100
будут проверены. - Вам не разрешено выводить программы Mathemania, которые не приводят к целому числу. Если вы это сделаете, ваша программа будет дисквалифицирована.
- Для команд
e
,f
иr
, код Mathemania внутри этих функций (напримерe(efrrc)
, когдаefrrc
это код внутри функции) должен оценивать с положительным целым числом выше2
. Если ваша программа не следует этому правилу, она также будет дисквалифицирована. - Ваша программа должна вернуть программу Mathemania для любого из 101 целого числа тестов в течение не более 30 минут на современном ноутбуке.
- Ваша программа должна возвращать одно и то же решение для любого целого числа при каждом запуске. Например, когда программе дают вход,
5
и она выводитefrc
, она должна выводить это каждый раз , когда вводится5
. - Вы не можете жестко кодировать любые решения для любого положительного целого числа.
- Чтобы максимально увеличить потенциал игры в гольф, ваша программа должна иметь возможность обрабатывать произвольно большие целые числа. Это не требование, хотя удачи, если ваш язык не поддерживает это.
Это метагольф , поэтому выигрывает самая низкая оценка!
ef
например, разрешен ли коду «пропустить» и просто вывести результат передef
операцией?Ответы:
Python 3.5, Оценка ??
На данный момент у меня нет выходных данных для всех 101 входных данных, но как только я запустите программу для всех тестовых случаев, я обновлю свои результаты.
Кроме того, мне не удалось проверить результаты некоторых тестовых случаев, которые я пробовал, из-за огромного размера номера, и в этот момент тайм-аут @ BradGilbertb2gills истек. Надеюсь, все выходы работают.
источник