Сегодня в моем классе статистики я обнаружил, что некоторые факториалы могут быть упрощены при умножении вместе! Например:5! * 3! = 5! *3*2 = 5! *6 = 6!
Твоя работа:
Учитывая строку, содержащую только арабские цифры и восклицательные знаки, упростите мой факториал до самой короткой из возможных строк, наименьшее количество байтов для вашего языка, кодируйте стиль гольфа.
вход
Строка, содержащая только арабские цифры и восклицательные знаки. Факториалы для ввода не будут больше 200! Факториалы не будут иметь более одного факториала на число. Входные данные могут быть приняты как список целых чисел.
Выход
Возможно, сокращенная строка, которая имеет эквивалентное значение на входе. Заказ не важен. Факториальная запись обязательна, но вы не обязаны использовать более одного факториального символа на число.
Контрольные примеры
In: 3!2!2!
Out: 4!
In 2!3!2!0!
Out: 4!
In: 7!2!2!7!2!2!2!2!
Out: 8!8!
In: 23!3!2!2!
Out: 24!
Also: 4!!
In: 23!3!2!2!2!
Out: 24!2!
In: 127!2!2!2!2!2!2!2!
Out: 128!
In: 32!56!29!128!
Out: 29!32!56!128!
Удачи
1!1!
просто пустой строкой?Ответы:
Желе ,
1718 байтМонадическая ссылка, получающая и возвращающая список чисел (привязывается к одному факториалу для каждого номера)
Попробуйте онлайн!
Как?
Гольф (хотя и написано независимо) версия решения Pietu1998.
источник
Желе , 19 байт
Попробуйте онлайн!
Быстро и грязно. Очень медленно, даже
23!2!3!2!
тестовый пример растягивается. Ввод / вывод в виде списков целых чисел.объяснение
источник
Чисто ,
397... 317 байтПопробуйте онлайн!
Это берет
[Int]
, определяет главные факторы результата и уменьшает факторы, чтобы найти наименьшее представление, используя самый большой фактор на любой стадии в качестве базового значения для следующего факторного члена. Он не завершит некоторые тестовые случаи на TIO, но он довольно * быстрый и может запустить их все менее чем за 3 минуты на ноутбуке среднего уровня.* для
O((prod(N)!)^sum(N))
алгоритма сложностиисточник
> <> , 66 байт
Попробуйте онлайн!
Неэффективно, не находит самую маленькую строку, и интерпретатор не очень хорошо справляется с чрезвычайно большими числами. Но хотя бы я пытался? Принимает ввод как список чисел через
-v
флаг.Сначала он вычисляет значение входных данных путем факториализации каждого числа и умножения их вместе. Затем он находит самый большой факториал, который делится чисто на сумму и выводит его. Повторяйте, пока он не получит простое число (которое выводит) или 1 и не выйдет из программы. Из-за этого он иногда не находит кратчайшего представления числа, например,
7!2!2!7!2!2!2!2!
возвращается тестовый пример10!224
вместо того,8!8!
чтобы найти, что сумма делится на 10! первый.источник
Рубин ,
240 237233 байтаЭто невероятно неэффективно
Принимает массив входных данных в качестве входных данных
Возвращает строку и выбирает кратчайший вариант, скажем
'720!'
,'6!!'
и'3!!!'
Попробуйте онлайн!
источник