Deux chaînes entrelacées

9

Dans cette question, j'ai défini une fonction "chaîne" comme une fonction qui:

  • est une permutation, ce qui signifie que chaque valeur correspond à et est mappée à exactement une valeur.

  • et permet que toute valeur puisse être obtenue à partir de toute autre valeur par des applications répétées de la fonction ou de son inverse.

Il y a beaucoup de fonctions qui font cela et certaines d'entre elles sont assez simples (voir les réponses à cette question). Maintenant, nous allons définir une classe distincte de fonctions que je vais appeler des fonctions "entrelacées". Une fonction entrelacée est une fonction sur un ensemble A , qui a deux partitions infinies a 0 et a 1 telles que la fonction est une fonction de chaîne à la fois sur un 0 et un 1 .

Cela signifie qu'aucune valeur dans un 0 ne peut correspondre à une valeur dans un 1 sous la fonction ou vice versa.

Tâche

Votre tâche consiste à écrire un code qui exécute ou définit une fonction entrelacée sur les entiers positifs. Votre fonction peut être n'importe quoi tant qu'elle répond aux critères d'être entrelacée. Vous devez inclure une explication de la raison pour laquelle votre fonction est imbriquée dans la réponse.

Il s'agit d'une question de donc les réponses seront notées en octets, avec moins d'octets étant mieux.

Ad Hoc Garf Hunter
la source
@flawr Merci! Je cherchais ce mot mais je ne pouvais pas y penser.
Ad Hoc Garf Hunter
Je pense que cela pourrait être considéré comme une dupe du dernier défi que vous avez lié, car il vous suffit de faire une transfromation supplémentaire, c'est-à-dire d'énumérer séparément tous les nombres pairs et impairs. Je ne pense pas que les réponses que vous obtiendrez ici apporteront quoi que ce soit de substantiellement nouveau.
flawr
@flawr Vous pourriez le faire, mais ce ne serait pas la meilleure façon. J'ai fait un peu d'expérimentation avec cela et il existe de nouvelles façons d'exécuter ces types de fonctions.
Ad Hoc Garf Hunter

Réponses:

2

Python, 46 42 37 octets

5 octets enregistrés grâce à @notjagan

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

Essayez-le en ligne!

Itère les nombres pairs et impairs avec des étapes de 4 et des liens sur 2 et 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
la source
1

JavaScript, 30 24 octets

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

Séquences:

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

Extrait de code

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` `);


la source