Zwei verwobene Ketten

9

In dieser Frage habe ich eine "Ketten" -Funktion als eine Funktion definiert, die:

  • ist eine Permutation, dh jeder Wert wird genau einem Wert zugeordnet und von genau diesem Wert zugeordnet.

  • und ermöglicht, dass jeder Wert durch wiederholte Anwendung der Funktion oder ihrer Umkehrung von jedem anderen Wert erhalten werden kann.

Es gibt viele Funktionen, die dies tun, und einige davon sind ziemlich einfach (siehe die Antworten auf diese Frage). Jetzt definieren wir eine separate Klasse von Funktionen, die ich "verwobene" Funktionen nennen werde. Eine verwobene Funktion ist eine Funktion auf einer Menge A , die zwei unendliche Partitionen a 0 und a 1 hat, so dass die Funktion eine Kettenfunktion sowohl auf einer 0 als auch auf einer 1 ist .

Dies bedeutet, dass kein Wert in einer 0 einem Wert in einer 1 unter der Funktion zugeordnet werden kann oder umgekehrt.

Aufgabe

Ihre Aufgabe ist es, einen Code zu schreiben, der eine verwobene Funktion für die positiven ganzen Zahlen ausführt oder definiert. Ihre Funktion kann alles sein, solange sie die Kriterien für die Verflechtung erfüllt. Sie sollten eine Erklärung hinzufügen, warum Ihre Funktion in der Antwort verwoben ist.

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

Ad-hoc-Garf-Jäger
quelle
@flawr Danke! Ich habe nach diesem Wort gesucht, aber ich konnte nicht daran denken.
Ad-hoc-Garf-Jäger
Ich denke, dies könnte als Betrug der letzten Herausforderung angesehen werden, die Sie verknüpft haben, da Sie nur eine zusätzliche Transfromation vornehmen müssen, dh alle geraden und alle ungeraden Zahlen getrennt aufzählen. Ich glaube nicht, dass eine der Antworten, die Sie hier erhalten, etwas wesentlich Neues liefern wird.
Fehler
@flawr Das könntest du machen, aber es wäre nicht der beste Weg. Ich habe ein wenig damit experimentiert und es gibt einige neuartige Möglichkeiten, diese Art von Funktionen auszuführen.
Ad-hoc-Garf-Jäger

Antworten:

2

Python, 46 42 37 Bytes

5 Bytes dank @notjagan gespeichert

lambda x:1<x<4and x*2%5or x-(x&2)*4+4

Probieren Sie es online aus!

Iteriert die geraden und ungeraden Zahlen mit den Schritten 4 und den Links auf 2 und 3:

=> 22 => 18 => 14 => 10 => 6 => 2 => 4 => 8 => 12 => 16 => 20 => 24 =>
=> 23 => 19 => 15 => 11 => 7 => 3 => 1 => 5 => 9 => 13 => 17 => 21 =>
Uriel
quelle
1

JavaScript, 30 24 Bytes

a=>(a+=a&2?-4:4)<0?a*a:a

Sequenzen:

  1. ... 19 15 11 7 3 1 5 9 13 17 21 ...
  2. ... 18 14 10 6 2 4 8 12 16 20 24 ...

Code-Auszug

f=a=>(a+=a&2?-4:4)<0?a*a:a
console.log('23 19 15 11 7 3 1 5 9 13 17'.split` `.map(a=>f(a|0)).join` `);
console.log('22 18 14 10 6 2 4 8 12 16 20'.split` `.map(a=>f(a|0)).join` `);


quelle