É bem sabido, no campo da matemática que estuda o infinito, que o produto cartesiano de qualquer quantidade finita de conjuntos contáveis também é contável .
Sua tarefa é escrever dois programas para implementar isso, um para mapear de lista para número inteiro, um para mapear de número inteiro para lista.
Sua função deve ser bijetiva e determinística, o que significa que 1
sempre será mapeado para uma determinada lista e 2
sempre será mapeado para outra lista, etc ...
Anteriormente , mapeamos números inteiros para uma lista composta apenas por 0
e 1
.
No entanto, agora a lista será composta por números não negativos.
Especificações
- Programa / função, formato razoável de entrada / saída.
- Se os números inteiros mapeados começam
1
ou partem de0
sua escolha, o que significa que0
não é necessário (mas pode) mapear para nada. - A matriz vazia
[]
deve ser codificada. - A entrada / saída pode estar em qualquer base.
- O compartilhamento de código entre as duas funções é permitido .
Pontuação
Isso é código-golfe . Menor pontuação ganha.
Pontuação é a soma dos comprimentos (em bytes) dos dois programas / funções.
code-golf
set-theory
Freira Furada
fonte
fonte
N^inf -> N
?Respostas:
Geléia ,
1816 bytesLista para número inteiro,
108 bytesMapeia listas de números inteiros não negativos para números inteiros positivos. Experimente online!
Inteiro para listar, 8 bytes
Mapeia números inteiros positivos para listas de números inteiros não negativos. Experimente online!
fundo
Seja p 0 , p 1 , p 2 , ⋯ a sequência de números primos em ordem crescente.
Para cada lista de números inteiros não negativos A: = [a 1 , ⋯, a n ] , mapeamos A para p 0 z (A) p 1 a 1 ⋯ p n a n , onde z (A) é o número de zeros de Uma .
Invertendo o mapa acima de maneira direta. Para um número inteiro positivo k , nós o fatoramos exclusivamente como o produto de potências primárias consecutivas n = p 0 α 0 p 1 α 1 ⋯ p n α n , onde α n > 0 , reconstruímos a lista como [α 1 , ⋯, α n ] , acrescentando α 0 zeros.
Como funciona
Listar para inteiro
Inteiro para listar
Saída de exemplo
Os primeiros cem números inteiros positivos são mapeados para as seguintes listas.
fonte
Python 2, 88 bytes
Demo:
Python 2, 130 bytes
Aqui está uma solução mais "eficiente", em que o comprimento de bit da saída é linear no comprimento de bit da entrada, em vez de exponencial.
fonte
e
a ser a inversa parad
:e=lambda l,i=0:l!=d(i)and-~e(l,i+1)
.Python 2,
204202 bytesFunciona aplicando repetidamente uma bijeção Z + x Z + <-> Z +, precedida pelo comprimento da lista.
fonte
e
é lista para número inteiro,d
é número inteiro para lista (codificar / decodificar).Retina, 17 + 23 = 40 bytes
Da lista para o número inteiro:
Experimente online!
Do número inteiro à lista:
Experimente online!
Usa o algoritmo de Kaseorg .
fonte