Faça uma cadeia infinita


16

Vamos definir uma classe de funções. Essas funções serão mapeadas dos inteiros positivos para os inteiros positivos e devem atender aos seguintes requisitos:

  • A função deve ser bijetiva, o que significa que todo valor é mapeado para e é mapeado para exatamente um valor.

  • Você deve ser capaz de passar de qualquer número inteiro positivo para qualquer outro número positivo por aplicações repetidas da função ou seu inverso.

Agora, escreva algum código que execute qualquer função nesta classe em sua entrada.

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


1
Você pode dar um exemplo?
23417 Jack

1
@Jack Claro, Considere a função que mapeia 1 -> 2, mapeia qualquer outro número ímpar a esse número menos 2, e cada número par àquele número mais 2.
post rock Garf Hunter

1
Não tenho certeza se entendi. F (x): = x + 1 seria uma função dessa classe? Nesse caso, 1+o lisp comum deve fazer o truque aqui.
MONODA43

2
@ MONODA43 Essa função é uma bijeção quando se considera todos os números inteiros. Mas esta pergunta pede uma bijeção nos números inteiros positivos. Sua sugestão falharia em gerar 1 porque não há x positivo para o qual x + 1 = 1.
kasperd

1
@Cowsquack Você deve conseguir passar de um número inteiro positivo para outro número inteiro positivo por aplicações repetidas da função ou seu inverso. Você não pode passar de 1 a 2 aplicando a identidade, não importa quantas vezes você repita.
kasperd

Respostas:



6

Python, 22 bytes

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

Os números pares vão para o número par anterior, os números ímpares vão para o próximo número ímpar e o mapeamento 2 -> 1 conecta esses dois.


espera ... então 6 pode resultar de 5 ou 8? isso é inválido?
Destructible Lemon

@DestructibleLemon Não, apenas um ímpar substituído com par na minha explicação.
orlp 24/07



4

Gelatina , 6 bytes

-*Ḥạo1

Experimente online!

Como 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
Estamos realmente deixando Dennis se safar com 'unhalve'? Haha
23417 orlp

2

Python 3, 43 bytes

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

Experimente online!

E o inverso, também 43 bytes:

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

Experimente online!

Os links TIO usam o código do rodapé de teste de Dennis.

Como todo mundo está usando uma maneira de fazer, eu decidi que seria diferente, então criei por conta própria (embora provavelmente não seja a primeira pessoa a descobri-la) a função. Isso funciona como mapas ... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ..., eu posso mostrar o desenho que fiz para testar isso, se você quiser.

Meu algoritmo de golfe pode ser provavelmente jogável - dicas serão apreciadas.

Versões ungolfed: Experimente online!



0

Mathematica, 21 bytes

a@1=2;a@b_:=b+2(-1)^b

Siga em frente, nada para ver aqui ...


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.