Дві переплетені ланцюги


9

У цьому питанні я визначив функцію "ланцюга" як функцію, яка:

  • є перестановкою, тобто кожне значення відображається в і точно відображається на одне значення.

  • і дозволяє будь-яке значення може бути отримане з будь-якого іншого значення шляхом повторних застосувань функції або її зворотного.

Є багато функцій, які виконують це, і деякі з них досить прості (див. Відповіді на це питання). Тепер ми будемо визначати окремий клас функцій, які я буду називати "переплетеними" функціями. Переплетені функція є функцією на множині А , який має два нескінченних розділів 0 і 1 таким чином, що функція є функцією ланцюга на обох в 0 і в 1 .

Це означає , що ні одне значення в вигляді 0 не може відображати до значення в вигляді 1 по функції або навпаки.

Завдання

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

Це питання, тому відповіді будуть набрані в байтах, при цьому менше байтів буде краще.


@flawr Дякую! Я шукав це слово, але не міг його придумати.
Ad Hoc Garf Hunter

Я думаю, що це можна вважати дурпом останнього виклику, який ви пов’язали, оскільки вам просто потрібно зробити додаткову трансфромацію, тобто окремо перерахувати всі парні та непарні числа. Я не думаю, що жоден із відповідей, які ви отримаєте тут, не дасть нічого істотного нового.
flawr

@flawr Ви могли це зробити, але це було б не найкращим способом. Я трохи експериментував з цим, і є кілька нових способів виконання цих типів функцій.
Ad Hoc Garf Hunter

Відповіді:


2

Пітон, 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` `);


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.