Две переплетенные цепи

9

В этом вопросе я определил «цепную» функцию как функцию, которая:

  • является перестановкой, означающей, что каждое значение отображается и сопоставляется ровно одним значением.

  • и позволяет любое значение может быть получено из любого другого значения путем повторного применения функции или ее обратного.

Есть много функций, которые делают это, и некоторые из них довольно просты (см. Ответы на этот вопрос). Теперь мы собираемся определить отдельный класс функций, которые я буду называть «переплетенными» функциями. Переплетены функция является функцией на множестве А , который имеет два бесконечных разделов 0 и 1 таким образом, что функция является функцией цепи на обоих в 0 и в 1 .

Это означает , что ни одно значение в виде 0 не может отображать до значения в виде 1 по функции или наоборот.

задача

Ваша задача - написать код, который выполняет или определяет переплетенную функцию для натуральных чисел. Ваша функция может быть чем угодно, если она удовлетворяет критериям для переплетения. Вы должны включить объяснение, почему ваша функция переплетена в ответе.

Это вопрос, поэтому ответы будут оцениваться в байтах, причем меньше байтов будет лучше.

Специальный охотник за гарфами
источник
@flawr Спасибо! Я искал это слово, но не мог придумать.
Ad Hoc
Я думаю, что это можно считать обманом последней проблемы, с которой вы столкнулись, поскольку вам просто нужно сделать дополнительное преобразование, то есть перечислить все четные и нечетные числа по отдельности. Я не думаю, что какой-либо из ответов, которые вы получите здесь, даст что-то принципиально новое.
flawr
@flawr Вы могли бы сделать это, но это был бы не лучший способ. Я немного поэкспериментировал с этим, и есть несколько новых способов выполнения этих типов функций.
Ad Hoc

Ответы:

2

Python, 46 42 37 байт

5 байтов сохранено благодаря @notjagan

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

Попробуйте онлайн!

Итерирует четные и нечетные числа с шагом 4 и ссылками на 2 и 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 =>
Уриэль
источник
1

JavaScript, 30 24 байта

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

Последовательности:

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

Фрагмент кода

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


источник