Dua rantai terjalin

9

Dalam pertanyaan ini saya mendefinisikan fungsi "rantai" sebagai fungsi yang:

  • adalah permutasi, yang berarti bahwa setiap nilai memetakan dan dipetakan dengan tepat satu nilai.

  • dan memungkinkan nilai apa pun dapat diperoleh dari nilai lain dengan aplikasi berulang fungsi atau kebalikannya.

Ada banyak fungsi yang melakukan ini dan beberapa di antaranya cukup sederhana (lihat jawaban atas pertanyaan itu). Sekarang kita akan mendefinisikan kelas fungsi terpisah yang akan saya panggil fungsi "terjalin". Fungsi terjalin adalah fungsi pada satu set A , yang memiliki dua partisi yang tak terbatas sebuah 0 dan satu 1 sehingga fungsi adalah rantai fungsi pada kedua sebuah 0 dan a 1 .

Ini berarti bahwa tidak ada nilai dalam sebuah 0 dapat memetakan ke nilai dalam suatu 1 di bawah fungsi atau sebaliknya.

Tugas

Tugas Anda adalah menulis kode yang melakukan atau mendefinisikan fungsi jalinan pada bilangan bulat positif. Fungsi Anda bisa apa saja asalkan memenuhi kriteria untuk terjalin. Anda harus menyertakan penjelasan mengapa fungsi Anda terjalin dalam jawabannya.

Ini adalah pertanyaan sehingga jawaban akan dinilai dalam byte, dengan lebih sedikit byte yang lebih baik.

Ad Hoc Garf Hunter
sumber
@ flawr, terima kasih! Saya mencari kata itu tetapi saya tidak bisa memikirkannya.
Ad Hoc Garf Hunter
Saya pikir ini dapat dianggap sebagai penipuan dari tantangan terakhir yang Anda tautkan, karena Anda hanya perlu melakukan transfromasi tambahan, yaitu menghitung semua angka genap dan semua angka ganjil secara terpisah. Saya tidak berpikir salah satu jawaban yang Anda dapatkan di sini akan memberikan sesuatu yang secara substansial baru.
flawr
@ flawr Anda bisa melakukan itu, tetapi itu bukan cara terbaik. Saya telah melakukan sedikit eksperimen dengan ini dan ada beberapa cara baru untuk melakukan jenis fungsi ini.
Ad Hoc Garf Hunter

Jawaban:

2

Python, 46 42 37 byte

5 byte disimpan berkat @ notjagan

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

Cobalah online!

Iterasi angka genap dan ganjil dengan langkah 4 dan tautan 2 dan 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
sumber
1

JavaScript, 30 24 byte

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

Urutan:

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

Cuplikan kode

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


sumber