(すべての整数のセット)から(たとえば恒等関数)に全単射関数を作成するのは簡単です。Z
それから全単射関数を作成することも可能であるに(2つの整数のすべてのペアのセットのデカルト積のと)。たとえば、2D平面上の整数ポイントを表すラティスを取得し、0から外側にらせんを描き、そのポイントと交差するときのらせんに沿った距離として整数のペアをエンコードできます。Z 2 Z Z
(自然数でこれを行う関数は、ペアリング関数として知られています。)
実際、これらの全単射関数のファミリーが存在します:
チャレンジ
関数(は正の整数)のファミリーを、整数を個の整数のタプルに全単射でマッピングするというプロパティで定義します。k f k(x )k
入力と与えられると、提出は返す必要があります。x f k(x )
これはcode-golfなので、最短の有効な回答(バイト単位で測定)が勝ちます。
仕様書
- 上記の基準を満たす限り、任意のファミリを使用できます。
- 関数ファミリーの動作方法の説明と、関数の逆数を計算するスニペットを追加することをお勧めします(これはバイトカウントには含まれません)。
- 関数が全単射であることを証明できる限り、逆関数が計算不可能であれば問題ありません。
- 言語の符号付き整数と符号付き整数のリストに適切な表現を使用できますが、関数への入力を無制限にする必要があります。
- 値を最大127までサポートする必要があります。
k
し、x
代わりに整数を?