Bilden Sie eine unendliche Kette

16

Definieren wir eine Klasse von Funktionen. Diese Funktionen werden von den positiven Ganzzahlen auf die positiven Ganzzahlen abgebildet und müssen die folgenden Anforderungen erfüllen:

  • Die Funktion muss bijektiv sein, dh, jeder Wert wird genau einem Wert zugeordnet.

  • Sie müssen in der Lage sein, durch wiederholte Anwendung der Funktion oder ihrer Umkehrung von einer positiven Ganzzahl zu einer anderen positiven Ganzzahl zu gelangen.

Schreiben Sie nun einen Code, der eine beliebige Funktion in dieser Klasse für die Eingabe ausführt.

Dies ist eine Frage, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.

Weizen-Assistent
quelle
1
Kannst du ein Beispiel geben?
Jack
1
@Jack Sicher, Betrachten Sie die Funktion, die 1 -> 2 zuordnet, jede andere ungerade Zahl dieser Zahl minus 2 zuordnet und jede gerade Zahl dieser Zahl plus 2.
Weizen-Assistent
1
Nicht sicher ob ich verstehe. Wäre f (x): = x + 1 eine Funktion dieser Klasse? In diesem Fall 1+sollte lisp hier genau das Richtige tun.
MONODA43
2
@ MONODA43 Diese Funktion ist eine Fehlfunktion, wenn alle ganzen Zahlen berücksichtigt werden. Diese Frage verlangt jedoch eine Verzerrung der positiven ganzen Zahlen. Ihr Vorschlag würde 1 nicht ausgeben, da es kein positives x gibt, für das x + 1 = 1 ist.
Kasperd
1
@Cowsquack Sie müssen in der Lage sein, durch wiederholtes Anwenden der Funktion oder ihrer Umkehrung von einer positiven Ganzzahl zu einer anderen positiven Ganzzahl zu gelangen. Sie können nicht von 1 zu 2 gelangen, indem Sie die Identität anwenden, egal wie oft Sie sich wiederholen.
Kasperd

Antworten:

10

Python 3 , 24 Bytes

lambda n:n-(-1)**n*2or 1

Probieren Sie es online!

Dennis
quelle
Ha, Sie haben mich verwöhnt, weil ich 20 zusätzliche Sekunden gebraucht habe, um meine Sequenz aufzuschreiben, bevor ich sie veröffentlicht habe ...
ETHproductions
6

Python, 22 Bytes

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

Die geraden Zahlen gehen zur vorherigen geraden Zahl, die ungeraden Zahlen gehen zur nächsten ungeraden Zahl, und die Zuordnung 2 -> 1 verbindet diese beiden.

orlp
quelle
warte ... also 6 kann aus 5 oder 8 resultieren? das ist ungültig?
Destructible Lemon
@ DestructibleLemon Nein, nur eine ungerade mit gerade in meiner Erklärung ersetzt.
Orlp
5

JavaScript (ES6), 20 Byte

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

Karten ... -> 5 -> 3 -> 1 -> 2 -> 4 -> ..., die ich für gültig halte . Korrigiere mich, wenn ich falsch liege ...

ETHproductions
quelle
9
Gleichgesinnte denken großartig. Ich benutze das Gegenteil.
Dennis
@Dennis Heh, und ich habe gerade festgestellt, dass die Inverse 1 Byte kürzer ist:n=>n%2?n+2:n-2||1:2
ETHproductions
@Dennis Du wurdest als Yoda: o ( StepHens Chatpost )
HyperNeutrino bestätigt.
@HyperNeutrino Gleichgesinnte denken
Pavel
5

Haskell, 20 Bytes

f 1=2
f x=x+2*(-1)^x

Die Beispielfunktion aus dem Kommentar des OP in Haskell. Probieren Sie es online!

nimi
quelle
4

Gelee , 6 Bytes

-*Ḥạo1

Probieren Sie es online!

Wie es funktioniert

-*Ḥạ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.
Dennis
quelle
13
Lassen wir Dennis wirklich mit "Unhalve" davonkommen? Haha.
Orlp
2

Python 3, 43 Bytes

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

Probieren Sie es online!

Und umgekehrt auch 43 Bytes:

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

Probieren Sie es online!

TIO-Links verwenden Dennis 'Testfußcode.

Da jeder eine Methode anwendet, habe ich beschlossen, dass ich anders sein würde. Ich habe also eine eigene Funktion erstellt (obwohl ich wahrscheinlich nicht der erste bin, der sie entdeckt). Diese Funktionen ordnen gerne zu... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ... : Ich kann Ihnen die Handzeichnung zeigen, die ich gemacht habe, um dies zu testen, wenn Sie möchten.

Mein Golf-Algorithmus kann sein wahrscheinlich golffähig - Tipps wären willkommen.

Ungolfed-Versionen: Probieren Sie es online!

Stephen
quelle
0

Mathematica, 21 Bytes

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

Machen Sie mit, hier gibt es nichts zu sehen ...

LegionMammal978
quelle