Due catene intrecciate


9

In questa domanda ho definito una funzione "catena" come una funzione che:

  • è una permutazione, nel senso che ogni valore è mappato e mappato esattamente da un valore.

  • e consente che qualsiasi valore possa essere ottenuto da qualsiasi altro valore mediante ripetute applicazioni della funzione o del suo inverso.

Ci sono molte funzioni che lo fanno e alcune sono piuttosto semplici (vedi le risposte a quella domanda). Ora definiremo una classe separata di funzioni che chiamerò funzioni "intrecciate". Una funzione intrecciata è una funzione su un insieme A , che ha due partizioni infinite un 0 e un 1 tale che la funzione è una funzione catena sia un 0 e un 1 .

Ciò significa che nessun valore in un 0 può mappare un valore in un 1 sotto la funzione o viceversa.

Compito

Il tuo compito è scrivere un codice che esegua o definisca una funzione intrecciata sugli interi positivi. La tua funzione può essere qualsiasi cosa purché soddisfi i criteri per essere intrecciata. Dovresti includere una spiegazione del perché la tua funzione è intrecciata nella risposta.

Questa è una domanda di quindi le risposte verranno classificate in byte, con meno byte migliori.


@flawr Grazie! Stavo cercando quella parola ma non riuscivo a pensarci.
Ad Hoc Garf Hunter

Penso che questo possa essere considerato un inganno dell'ultima sfida che hai collegato, dato che devi solo fare una ulteriore trasfromazione, cioè enumerare tutti i numeri pari e dispari separatamente. Non credo che nessuna delle risposte che otterrai qui fornirà qualcosa di sostanzialmente nuovo.
Flawr

@flawr Potresti farlo, ma non sarebbe il modo migliore. Ho fatto un piccolo esperimento con questo e ci sono alcuni modi nuovi per eseguire questo tipo di funzioni.
Ad Hoc Garf Hunter

Risposte:


2

Python, 46 42 37 byte

5 byte salvati grazie a @notjagan

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

Provalo online!

Consente di scorrere i numeri pari e dispari con passaggi di 4 e collegamenti su 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 =>

1

JavaScript, 30 24 byte

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

sequenze:

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

Snippet di codice

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


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.