Il est trivialement possible de créer une fonction bijective de (l'ensemble de tous les entiers) à (par exemple la fonction d'identité).Z
Il est également possible de créer une fonction bijective de à (l'ensemble de toutes les paires de 2 entiers; le produit cartésien de et ). Par exemple, nous pourrions prendre le réseau représentant des points entiers sur un plan 2D, dessiner une spirale de 0 vers l'extérieur, puis encoder des paires d'entiers comme distance le long de la spirale lorsqu'elle coupe ce point.Z 2 Z Z
(Une fonction qui fait cela avec des nombres naturels est appelée fonction d'appariement .)
En fait, il existe une famille de ces fonctions bijectives:
Le défi
Définissez une famille de fonctions (où est un entier positif) avec la propriété que mappe bijectivement des entiers à multiplets d'entiers.k f k ( x ) k
Votre soumission doit, compte tenu des entrées et , renvoyer .x f k ( x )
C'est le code-golf , donc la réponse valide la plus courte (mesurée en octets) l'emporte.
Caractéristiques
- Toute famille peut être utilisée tant qu'elle remplit les critères ci-dessus.
- Nous vous encourageons à ajouter une description du fonctionnement de votre famille de fonctions, ainsi qu'un extrait de code pour calculer l'inverse de la fonction (cela n'est pas inclus dans votre nombre d'octets).
- C'est bien si la fonction inverse n'est pas calculable, tant que vous pouvez le prouver, la fonction est bijective.
- Vous pouvez utiliser n'importe quelle représentation appropriée pour les entiers signés et les listes d'entiers signés pour votre langue, mais vous devez autoriser les entrées de votre fonction à être illimitées.
- Il vous suffit de prendre en charge des valeurs de jusqu'à 127.
k
etx
au lieu d'entiers?