無限の連鎖を作る


16

関数のクラスを定義しましょう。これらの関数は、正の整数から正の整数にマップし、次の要件を満たしている必要があります。

  • この関数は全単射である必要があります。つまり、すべての値が正確に1つの値にマッピングされ、マッピングされます。

  • 関数またはその逆を繰り返し適用することにより、正の整数から他の正の整数に到達できる必要があります。

次に、入力でこのクラスの任意の1つの機能を実行するコードを作成します。

これは質問なので、回答はバイト単位でスコアリングされ、バイト数が少ない方が良いでしょう。


1
例を挙げていただけますか?
ジャック

1
@Jack確かに、1をマップする機能を検討- > 2を、その番号に他のすべての奇数、その数に数マイナス2、及び全ての偶数番号をマッピングし、プラス2
小麦ウィザード

1
わかりません。f(x):= x + 1はこのクラスの関数でしょうか?その場合、1+一般的なLisp ではここでトリックを行う必要があります。
MONODA43

2
@ MONODA43この関数は、すべての整数を考慮すると全単射です。しかし、この質問は正の整数の全単射を求めています。x + 1 = 1の正のxがないため、提案は1を出力できません。
カスペルド

1
@Cowsquack 関数またはその逆を繰り返し適用することにより、任意の正の整数から他の正の整数に到達できる必要があります。何度繰り返しても、IDを適用して1から2を取得することはできません。
カスペルド

回答:



6

Python、22バイト

lambda n:n+n%2*4-2or 1

偶数は前の偶数に下がり、奇数は次の奇数に上がり、マッピング2-> 1はそれら2つを接続します。


待って...だから6は5または8の結果になりますか?それは無効ですか?
破壊可能なレモン

@DestructibleLemonいいえ、私の説明では奇数を偶数に置き換えました。
orlp

5

JavaScript(ES6)、20バイト

n=>n>1?n%2?n-2:n+2:2

地図... -> 5 -> 3 -> 1 -> 2 -> 4 -> ...私は、考えて有効です。私が間違っている場合は修正してください...


9
同様に心は素晴らしいと思います。私は逆を使用しています。
デニス

@Dennis Heh、および私はちょうど逆が1バイト短いことを実現しました:n=>n%2?n+2:n-2||1:2
ETHproductions

@Dennisあなたはヨーダであることが確認されました:o(StepHenのチャット投稿
-HyperNeutrino

@HyperNeutrinoよく、同様の心が考える
パベル


4

ゼリー、6バイト

-*Ḥạo1

オンラインでお試しください!

使い方

-*Ḥạo1  Main link. Argument: n

-*      Compute (-1)**n, yielding 1 for even n and -1 for odd n.
  Ḥ     Unhalve; multipliy the result by 2.
   ạ    Compute the absolute difference of the result and n.
    o1  If the difference is 0, yield 1.

13
私たちは本当にデニスに「アンハルブ」をやめさせていますか?ハハ。
orlp

2

Python 3、43バイト

lambda n,a=(1,3,-3,-1):n+a[n%4]if n-2else 1

オンラインでお試しください!

そして逆も、43バイト:

lambda n,a=(-3,-1,1,3):n+a[n%4]if n-1else 2

オンラインでお試しください!

TIOリンクは、デニスのテストフッターコードを使用します。

誰もが1つの方法を使用しているので、私は違うと決めたので、自分で作成しました(おそらく最初に発見した人ではないでしょうが)。この関数はのようなマップで... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ...、必要に応じてこれをテストするために作成した手描きを表示できます。

私のゴルフのアルゴリズムおそらくゴルフに適しているかもしれません -ヒントをいただければ幸いです。

未ゴルフバージョン:オンラインでお試しください!



0

Mathematica、21バイト

a@1=2;a@b_:=b+2(-1)^b

ここに見えるものは何もありません...


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.