Es trivialmente posible crear una función biyectiva de (el conjunto de todos los enteros) a Z (por ejemplo, la función de identidad).
También es posible crear una función biyectiva de a Z 2 (el conjunto de todos los pares de 2 enteros; el producto cartesiano de Z y Z ). Por ejemplo, podríamos tomar la red que representa puntos enteros en un plano 2D, dibujar una espiral desde 0 hacia afuera y luego codificar pares de enteros como la distancia a lo largo de la espiral cuando se cruza con ese punto.
(Una función que hace esto con números naturales se conoce como función de emparejamiento ).
De hecho, existe una familia de estas funciones biyectivas:
El reto
Defina una familia de funciones (donde k es un entero positivo) con la propiedad de que f k ( x ) mapea bijetivamente enteros a k -tuplas de enteros.
Su envío debe, dadas las entradas y x , devolver f k ( x ) .
Este es el código de golf , por lo que gana la respuesta válida más corta (medida en bytes).
Presupuesto
- Se puede usar cualquier familia siempre que cumpla con los criterios anteriores.
- Se le recomienda agregar una descripción de cómo funciona su familia de funciones, así como un fragmento para calcular el inverso de la función (esto no está incluido en su recuento de bytes).
- Está bien si la función inversa no es computable, siempre que pueda demostrar que la función es biyectiva.
- Puede usar cualquier representación adecuada para enteros con signo y listas de enteros con signo para su idioma, pero debe permitir que las entradas a su función sean ilimitadas.
- Solo necesita admitir valores de hasta 127.
k
y enx
lugar de enteros?