fundo
É bem conhecido na matemática que números inteiros podem ser colocados em uma correspondência individual com pares de números inteiros. Existem muitas maneiras possíveis de fazer isso e, neste desafio, você implementará uma delas e sua operação inversa.
A tarefa
Sua entrada é um número inteiro positivo n > 0
. Sabe-se que existem números inteiros não negativos únicos, a, b ≥ 0
tais que . Sua saída é a "versão invertida" do número inteiro positivo .n == 2a * (2*b + 1)
n
2b * (2*a + 1)
Você pode assumir que a entrada e a saída se encaixam no tipo de dados inteiro não assinado padrão do seu idioma.
Regras e pontuação
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
Elas são fornecidas no formato in <-> out
, já que a função a ser implementada é sua própria inversa: se você devolver a saída a ela, deverá obter a entrada original.
1 <-> 1
2 <-> 3
4 <-> 5
6 <-> 6
7 <-> 8
9 <-> 16
10 <-> 12
11 <-> 32
13 <-> 64
14 <-> 24
15 <-> 128
17 <-> 256
18 <-> 48
19 <-> 512
20 <-> 20
28 <-> 40
30 <-> 384
56 <-> 56
88 <-> 224
89 <-> 17592186044416
Entre os melhores
Aqui está um snippet de pilha para gerar uma classificação regular e uma visão geral dos vencedores por idioma. Para garantir que sua resposta seja exibida, inicie-a com um título, usando o seguinte modelo de remarcação:
## Language Name, N bytes
onde N
está o tamanho do seu envio. Se você melhorar sua pontuação, poderá manter as pontuações antigas no título, identificando-as. Por exemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se você deseja incluir vários números no seu cabeçalho (por exemplo, porque sua pontuação é a soma de dois arquivos ou deseja listar as penalidades do sinalizador de intérpretes separadamente), verifique se a pontuação real é o último número no cabeçalho:
## Perl, 43 + 2 (-p flag) = 45 bytes
Você também pode transformar o nome do idioma em um link que será exibido no snippet da tabela de classificação:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes