Recentemente, eu encontrei um mapeamento bijetivo f de números inteiros positivos para seqüências aninhadas finitas. O objetivo deste desafio é implementá-lo no idioma de sua escolha.
O Mapeamento
Considere um número n com os fatores em que . Então:
Por exemplo:
Regras
- Você pode escrever um programa completo ou uma função para executar esta tarefa.
- A saída pode estar em qualquer formato reconhecível como uma sequência.
- Built-ins para fatoração nobre, teste de primalidade, etc. são permitidos .
- As brechas padrão não são permitidas.
- Seu programa deve concluir o último caso de teste em menos de 10 minutos na minha máquina.
- Isso é código-golfe, então o código mais curto vence!
Casos de teste
10
:{{},{{}},{}}
21
:{{{}},{},{{}}}
42
:{{{}},{},{{}},{}}
30030
:{{{}},{{}},{{}},{{}},{{}},{}}
44100
:{{{{}}},{{{}}},{{{}}},{},{}}
16777215
:{{{{}}},{{}},{{}},{},{{}},{{}},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{{}}}
16777213
: pastebin
Respostas:
Pitão, 29 bytes
Demonstração
Isso define uma função
'
, que executa o mapeamento desejado.Uma função auxiliar
y
, executa o mapeamento recursivamente, dada uma decomposição principal. O caso base e a decomposição principal são executados em'
.fonte
CJam,
514844424139343331 bytesExperimente on-line no intérprete CJam .
Obrigado a @ MartinBüttner por jogar fora 3 bytes!
Graças a @PeterTaylor por jogar fora 3 bytes e abrir caminho para mais 1!
Pelo menos no meu computador, o download do arquivo leva mais tempo do que a execução do programa ...
I / O
Essa é uma função nomeada que aparece e número inteiro de STDIN e envia uma matriz de retorno.
Como o CJam não faz distinção entre matrizes vazias e cadeias vazias - uma cadeia é simplesmente uma lista que contém apenas caracteres -, a representação da cadeia terá a seguinte aparência:
referindo-se à seguinte matriz aninhada
Verificação
Como funciona
fonte
mf e=
é muito melhor do que o que encontrei quando fiz um teste de sanidade enquanto a pergunta estava na caixa de areia, mas uma melhoria que encontrei e que você não usou é fazer o mapeamento para os dois como(0a*+
- ieri{}sa2*{mf_W=){mp},\fe=(0a*+0j\{)j}%*}j
. E há uma melhoria muito maior, bem como que eu vou te dar headstart algumas horas em ...{mf_W=)1|{mp},\fe=(0a*+{)J}%}:J
1|
. Obrigado novamente!Mathematica, 88 bytes
fonte