Duas correntes entrelaçadas

9

Em esta pergunta que eu definida uma função de "cadeia" como uma função que:

  • é uma permutação, o que significa que todo valor é mapeado para e é mapeado exatamente por um valor.

  • e permite que qualquer valor possa ser obtido de qualquer outro valor por aplicações repetidas da função ou seu inverso.

Existem muitas funções que fazem isso e algumas são bem simples (veja as respostas nessa pergunta). Agora vamos definir uma classe separada de funções que chamarei de funções "entrelaçadas". Uma função entrelaçados é uma função em um conjunto Um , que possui duas partições infinitas um 0 e um 1 de tal modo que a função é uma função de cadeia tanto um 0 e um 1 .

Isto significa que nenhum valor de um 0 pode mapear para um valor em um 1 sob a função ou vice-versa.

Tarefa

Sua tarefa é escrever um código que execute ou defina uma função entrelaçada nos números inteiros positivos. Sua função pode ser qualquer coisa, desde que satisfaça os critérios de interligação. Você deve incluir uma explicação sobre por que sua função está entrelaçada na resposta.

Esta é uma questão de para que as respostas sejam pontuadas em bytes, com menos bytes sendo melhores.

Caçador Ad Hoc Garf
fonte
@flawr Obrigado! Eu estava procurando por essa palavra, mas não consegui pensar nela.
Ad Hoc Garf Hunter
Eu acho que isso pode ser considerado um engano do último desafio que você vinculou, pois você só precisa fazer uma transfromação adicional, ou seja, enumerar todos os números pares e ímpares separadamente. Acho que nenhuma das respostas que você está recebendo aqui fornecerá algo substancialmente novo.
flawr
Flawr @ Você poderia fazer isso, mas não seria o melhor caminho. Eu experimentei um pouco isso e existem algumas maneiras novas de executar esses tipos de funções.
Ad Hoc Garf Hunter 08/08/19

Respostas:

2

Python, 46 42 37 bytes

5 bytes salvos graças a @notjagan

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

Experimente online!

Repete os números pares e ímpares com as etapas de 4 e os links 2 e 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
fonte
1

JavaScript, 30 24 bytes

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

Sequências:

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

Fragmento de código

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


fonte