Недавно я нашел биективное отображение f из натуральных чисел в конечные вложенные последовательности. Цель этого задания - реализовать его на выбранном вами языке.
Картирование
Рассмотрим число n с факторами, где . Потом:
Например:
правила
- Вы можете написать полную программу или функцию для выполнения этой задачи.
- Вывод может быть в любом формате, распознаваемом как последовательность.
- Разрешены встроенные модули для первичной факторизации, тестирования первичности и т . Д.
- Стандартные лазейки запрещены.
- Ваша программа должна завершить последний контрольный пример менее чем за 10 минут на моем компьютере.
- Это код-гольф, поэтому выигрывает самый короткий код!
Тестовые случаи
10
:{{},{{}},{}}
21
:{{{}},{},{{}}}
42
:{{{}},{},{{}},{}}
30030
:{{{}},{{}},{{}},{{}},{{}},{}}
44100
:{{{{}}},{{{}}},{{{}}},{},{}}
16777215
:{{{{}}},{{}},{{}},{},{{}},{{}},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{{}}}
16777213
: pastebin
Ответы:
Pyth, 29 байт
демонстрация
Это определяет функцию,
'
которая выполняет желаемое отображение.Вспомогательная функция,
y
выполняет отображение рекурсивно с учетом простого разложения. Базовый случай и простое разложение выполняются в'
.источник
CJam,
514844424139343331 байтПопробуйте онлайн в интерпретаторе CJam .
Спасибо @ MartinBüttner за 3 байта!
Спасибо @PeterTaylor за игру в 3 байта и прокладку пути еще для 1!
По крайней мере, на моем компьютере загрузка файла занимает больше времени, чем запуск программы ...
I / O
Это именованная функция, которая извлекает и целое число из STDIN и возвращает массив в ответ.
Поскольку CJam не различает пустые массивы и пустые строки - строка - это просто список, содержащий только символы - строковое представление будет выглядеть так:
ссылаясь на следующий, вложенный массив
верификация
Как это устроено
источник
mf e=
гораздо лучше , чем то , что я нашел , когда я постучал тест здравомыслия в то время как вопрос был в песочнице, но одно улучшения я обнаружил , которые вы не использовали, чтобы сделать отображение для двоек , как(0a*+
- то естьri{}sa2*{mf_W=){mp},\fe=(0a*+0j\{)j}%*}j
. И есть гораздо большее улучшение, которое я дам вам несколько часов вперед ...{mf_W=)1|{mp},\fe=(0a*+{)J}%}:J
1|
. Еще раз спасибо!Mathematica, 88 байт
источник