Crea una catena infinita


16

Consente di definire una classe di funzioni. Queste funzioni verranno mappate dagli interi positivi agli interi positivi e devono soddisfare i seguenti requisiti:

  • La funzione deve essere Biiettiva, il che significa che ogni valore è mappato e identificato esattamente da un valore.

  • Devi essere in grado di passare da qualsiasi numero intero positivo a qualsiasi altro numero intero positivo mediante ripetute applicazioni della funzione o del suo inverso.

Ora, scrivi del codice che eseguirà una qualsiasi funzione in questa classe sul suo input.

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


1
Puoi fare un esempio?
Jack,

1
@Jack Certo, considera la funzione che mappa 1 -> 2, mappa ogni altro numero dispari a quel numero meno 2, e ogni numero pari a quel numero più 2.
Post Rock Garf Hunter

1
Non sono sicuro di aver capito. F (x): = x + 1 sarebbe una funzione di questa classe? In tal caso, 1+in comune lisp dovrebbe fare il trucco qui.
MONODA43,

2
@ MONODA43 Quella funzione è una biiezione quando si considerano tutti i numeri interi. Ma questa domanda richiede una biiezione sugli interi positivi. Il tuo suggerimento non riuscirebbe a produrre 1 perché non ci sono x positivi per cui x + 1 = 1.
Kasperd,

1
@Cowsquack Devi essere in grado di ottenere da qualsiasi numero intero positivo a qualsiasi altro numero intero positivo mediante ripetute applicazioni della funzione o del suo inverso. Non puoi ottenere da 1 a 2 applicando l'identità, non importa quante volte ripeti.
Kasperd,

Risposte:



6

Python, 22 byte

lambda n:n+n%2*4-2or 1

I numeri pari scendono al numero pari precedente, i numeri dispari salgono al numero dispari successivo e la mappatura 2 -> 1 collega quei due.


aspetta ... quindi 6 possono derivare da 5 o 8? non è valido?
Limone distruttibile

@DestructibleLemon No, solo un dispari sostituito con anche nella mia spiegazione.
orlp

5

JavaScript (ES6), 20 byte

n=>n>1?n%2?n-2:n+2:2

Mappe ... -> 5 -> 3 -> 1 -> 2 -> 4 -> ..., che io penso è valido. Correggimi se sbaglio...


9
Allo stesso modo le menti pensano alla grande. Sto usando l'inverso.
Dennis,

@Dennis Heh, e ho appena capito che l'inverso è più corto di 1 byte:n=>n%2?n+2:n-2||1:2
ETHproductions

@Dennis Sei stato confermato ad essere Yoda: o ( post di chat di StepHen )
HyperNeutrino,

@HyperNeutrino Grandemente, le menti simili pensano
Pavel


4

Gelatina , 6 byte

-*Ḥạo1

Provalo online!

Come funziona

-*Ḥạo1  Main link. Argument: n

-*      Compute (-1)**n, yielding 1 for even n and -1 for odd n.
  Ḥ     Unhalve; multipliy the result by 2.
   ạ    Compute the absolute difference of the result and n.
    o1  If the difference is 0, yield 1.

13
Stiamo davvero lasciando che Dennis riesca a cavarsela con "unhalve"? Haha.
orlp,

2

Python 3, 43 byte

lambda n,a=(1,3,-3,-1):n+a[n%4]if n-2else 1

Provalo online!

E l'inverso, anche 43 byte:

lambda n,a=(-3,-1,1,3):n+a[n%4]if n-1else 2

Provalo online!

I link TIO utilizzano il codice piè di pagina di test di Dennis.

Dal momento che tutti usano un modo di fare, ho deciso di essere diverso, quindi ho creato la propria funzione (anche se probabilmente non sono la prima persona a scoprirlo). Funziona su mappe come ... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ..., posso mostrarti il ​​disegno a mano che ho fatto per testarlo, se lo desideri.

Il mio algoritmo golfizzato potrebbe essere probabilmente golfabile - i suggerimenti sarebbero apprezzati.

Versioni non golfate: provalo online!




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.