Hacer una cadena infinita


16

Vamos a definir una clase de funciones. Estas funciones se asignarán de los enteros positivos a los enteros positivos y deben cumplir los siguientes requisitos:

  • La función debe ser Bijective, lo que significa que cada valor se asigna y se asigna exactamente por un valor.

  • Debe poder pasar de cualquier número entero positivo a cualquier otro número entero positivo mediante aplicaciones repetidas de la función o su inverso.

Ahora, escriba un código que realice cualquier función en esta clase en su entrada.

Esta es una pregunta de , por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.


1
¿Puede dar un ejemplo?
Jack

1
@Jack Claro, considere la función que asigna 1 -> 2, asigna cualquier otro número impar a ese número menos 2, y cada número par a ese número más 2.
Post Rock Garf Hunter

1
No estoy seguro de comprender. ¿Sería f (x): = x + 1 una función de esta clase? En ese caso, 1+en común el ceceo debería hacer el truco aquí.
MONODA43

2
@ MONODA43 Esa función es una biyección cuando se consideran todos los enteros. Pero esta pregunta pide una biyección en los enteros positivos. Su sugerencia no generará 1 porque no hay una x positiva para la cual x + 1 = 1.
kasperd

1
@Cowsquack Debe poder pasar de cualquier entero positivo a cualquier otro entero positivo mediante aplicaciones repetidas de la función o su inverso. No puede pasar del 1 al 2 aplicando la identidad, sin importar cuántas veces repita.
kasperd

Respuestas:



6

Python, 22 bytes

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

Los números pares bajan al número par anterior, los números impares suben al siguiente número impar y el mapeo 2 -> 1 conecta esos dos.


espera ... ¿entonces 6 puede resultar de 5 u 8? eso es invalido?
Destructible Lemon

@DestructibleLemon No, solo un par reemplazado por par en mi explicación.
orlp

5

JavaScript (ES6), 20 bytes

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

Mapas ... -> 5 -> 3 -> 1 -> 2 -> 4 -> ..., que creo que es válido. Corrígeme si me equivoco...


99
Mentes iguales piensan muy bien. Estoy usando el inverso.
Dennis

@Dennis Heh, y me acabo de dar cuenta de que el inverso es 1 byte más corto:n=>n%2?n+2:n-2||1:2
ETHproductions

@Dennis Has confirmado que eres Yoda: o ( publicación de chat de StepHen )
HyperNeutrino

@HyperNeutrino En gran medida , las mentes piensan igual
Pavel


4

Jalea , 6 bytes

-*Ḥạo1

Pruébalo en línea!

Cómo funciona

-*Ḥạ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
¿Realmente estamos dejando que Dennis se salga con la suya? Jaja.
orlp

2

Python 3, 43 bytes

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

Pruébalo en línea!

Y a la inversa, también 43 bytes:

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

Pruébalo en línea!

Los enlaces TIO utilizan el código de pie de página de prueba de Dennis.

Como todos usan una forma de hacerlo, decidí que sería diferente, así que creé la función propia (aunque probablemente no sea la primera persona en descubrirlo). Esto funciona como mapas ... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ..., puedo mostrarle el dibujo a mano que hice para probar esto si lo desea.

Mi algoritmo golfed puede ser , probablemente, es golfable - consejos serán bienvenidos.

Versiones sin golf: ¡ Pruébelo en línea!




Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.