Recientemente, he encontrado un mapeo biyectivo f desde enteros positivos hasta secuencias finitas anidadas. El propósito de este desafío es implementarlo en el idioma que elija.
El mapeo
Considere un número n con los factores donde . Luego:
Por ejemplo:
Reglas
- Puede escribir un programa completo o una función para realizar esta tarea.
- La salida puede estar en cualquier formato reconocible como una secuencia.
- Se muebles empotrados de descomposición en factores primos, las pruebas de primalidad, etc. permitidos .
- Las lagunas estándar no están permitidas.
- Su programa debe completar el último caso de prueba en menos de 10 minutos en mi máquina.
- Este es el código de golf, por lo que gana el código más corto.
Casos de prueba
10
:{{},{{}},{}}
21
:{{{}},{},{{}}}
42
:{{{}},{},{{}},{}}
30030
:{{{}},{{}},{{}},{{}},{{}},{}}
44100
:{{{{}}},{{{}}},{{{}}},{},{}}
16777215
:{{{{}}},{{}},{{}},{},{{}},{{}},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{{}}}
16777213
: pastebin
Respuestas:
Pyth, 29 bytes
Demostración
Esto define una función,
'
que realiza la asignación deseada.Una función auxiliar
y
, realiza el mapeo de forma recursiva dada una descomposición primaria. El caso base y la descomposición primaria se realizan en'
.fuente
CJam,
514844424139343331 bytesPruébelo en línea en el intérprete de CJam .
¡Gracias a @ MartinBüttner por jugar golf en 3 bytes!
¡Gracias a @PeterTaylor por jugar 3 bytes y preparar el camino para 1 más!
Al menos en mi computadora, descargar el archivo lleva más tiempo que ejecutar el programa ...
I / O
Esta es una función con nombre que emerge y es un entero de STDIN y empuja una matriz a cambio.
Como CJam no distingue entre matrices vacías y cadenas vacías (una cadena es simplemente una lista que contiene solo caracteres), la representación de cadena se verá así:
refiriéndose a la siguiente matriz anidada
Verificación
Cómo funciona
fuente
mf e=
es mucho mejor de lo que encontré cuando hice una prueba de cordura mientras la pregunta estaba en la caja de arena, pero una mejora que encontré que no has usado es hacer el mapeo para los dos como(0a*+
, es decirri{}sa2*{mf_W=){mp},\fe=(0a*+0j\{)j}%*}j
. Y también hay una mejora mucho mayor que les daré unas horas de ventaja sobre ...{mf_W=)1|{mp},\fe=(0a*+{)J}%}:J
1|
. ¡Gracias de nuevo!Mathematica, 88 bytes
fuente