Neste desafio, você calculará números de uma sequência curiosa.
Sua entrada é um número inteiro decimal não negativo único. Inverta os bits nesse número inteiro e, em seguida, quadrado o número para obter a saída necessária.
Ao reverter os bits, você não deve usar nenhum zeros à esquerda na entrada. Por exemplo:
26 (base 10) = 11010 (base 2) -> 01011 (base 2) = 11 -> 11*11 = 121
As primeiras 25 entradas / saídas desta sequência:
0: 0
1: 1
2: 1
3: 9
4: 1
5: 25
6: 9
7: 49
8: 1
9: 81
10: 25
11: 169
12: 9
13: 121
14: 49
15: 225
16: 1
17: 289
18: 81
19: 625
20: 25
21: 441
22: 169
23: 841
24: 9
Sua solução deve funcionar para números inteiros de tamanho arbitrário. Se o seu idioma não possui um método interno conveniente para usá-los, implemente sua resposta como se tivesse. Você será dispensado se sua resposta quebrar para números grandes. No entanto, não use truques / limites que funcionem apenas para um domínio limitado (como uma tabela de pesquisa).
Sua pontuação é o número de bytes do código fonte.
Bônus de -50% se você nunca converter o número de / para o binário. Isso não se limita aos componentes internos; se você percorrer o número pouco a pouco (alternando ou mascarando ou qualquer outro método), ele também contará como conversão. Não sei se isso é realmente possível, mas incentiva a identificação de um padrão na sequência.
Menor pontuação ganha.
Respostas:
Par , 5 bytes
Isso é quadrado binário-reverso-binário.
fonte
Mathematica,
4221 bytesAgradecimentos a alephalpha por reduzir pela metade a pontuação.
A verdadeira razão pela qual fiz isso no Mathematica foi porque eu queria ver uma trama ... com certeza parece engraçado:
fonte
Minkolang 0.14 , 43 bytes
Agradecemos a Mego por inspirar isso.
Teste o código aqui e verifique todos os casos de teste aqui .
Explicação
Isso usa essa relação de recorrência:
Se
n
for a entrada,a(n)
será o número resultante após a sequência binária ter sido invertida. 0 e 1 são óbvios. Paraa(2n) = a(n)
, considere quex0
(ondex
está qualquer sequência de dígitos binários) é invertido0x
, que é o mesmo quex
. Poisa(2n+1)
, o raciocínio é um pouco mais complicado.x1
invertido é1x
, o que é igualx + 2^k
para algunsk
. Estek
é um a mais que o número de dígitosx
, que éfloor(log_2(n))+1
. A fórmula completa segue, exceto que foi modificada um pouco. Isto é o que eu realmente código:Enquanto Mego e eu trabalhamos no chat
floor(n/2) = (n - n%2)/2
,. Assimlog_2(floor(n/2))+1 = log_2(n - n%2)
,. Além disso, a multiplicação por(n%2)
reduz as partes ímpares e pares em uma expressão.Finalmente, sem mais delongas, aqui está o código, explicado.
fonte
2n
e2n+1
em uma relação de recorrência, você deve pensar imediatamente nela como loop sobre bits.Japt ,
2928117 bytes(Você pode salvar o programa como um arquivo codificado em IEC_8859-1 com 7 bytes e carregá-lo no intérprete .)
Japt é um JavaScript abreviado da ETHproductions .
Experimente online!
Explicação:
¢
é um atalho paraUs2
, que é compilado paraU.s(2)
.U
é input (implícito),.s(2)
chamado por um número, invoca.toString(2)
(converte em binário, analisa como string).w
compila para.w()
, que reverte a string (.split('').reverse().join('')
).n2
funciona comoparseInt(<number>,2)
, ou seja, converte binário em decimal.²
invocaMath.pow(<number>,2)
, ou seja, esquadrinha o número.fonte
n
, para que você possa fazerUs2 a w a n2 p2
. Bom trabalho!w
funciona da mesma maneira em cadeias de caracteres e em matrizes, para que você não precise dos doisa
s :) #Us2
=¢
ep2
=²
, diminuindo para 7 bytes:¢w n2 ²
Python, 32 bytes
Experimente online.
O código é bem direto:
bin(6)
por exemplo, fornece0b110
a representação binária de 6.[:1:-1]
inverte a string e remove0b
.int
converte a string em um número inteiro de binário e a**2
coloca ao quadrado.fonte
Jolf , 7 bytes
Apenas corra. A entrada na página não funciona.
Explicação
Eu adicionei o
Q
comando, que faz isso 6 bytes:QC_Bj2
fonte
TeaScript , 9 bytes
11TeaScript é Javascript para jogar golfe
Golf mais uma vez quando eu voltar ao meu computador
Experimente online!
Testar tudo
fonte
Sério ,
87 bytesDesafios como esses são perfeitos para a sério :)
Experimente online
Explicação:
fonte
J,
109 bytesEste é um verbo tácito e monádico. Experimente online!
Graças a @randomra por jogar fora um byte!
Como funciona
fonte
CJam, 10 bytes
Experimente online
fonte
JavaScript,
64635653 bytesEu percebo que sou muito longa, mas ei, eu posso fazer isso: P
Demo
fonte
parseInt(
você pode fazer+("0b"+
[...n.toString(2)]
e.join``
n=>+("0b"+[...n.toString(2)].reverse().join``)**2
. Não funciona em qualquer navegador aindaPerl 6 , 21 bytes
Exemplo de uso:
fonte
PHP, 45 bytes
fonte
Shell, 25
Entrada / saída via STDIN / STDOUT:
fonte
Pitão - 9 bytes
Conversões diretas. Na verdade, eu atribuí 2 a um var, o que é bem estranho.
Conjunto de Teste .
fonte
Pitão, 9 bytes
Esta é uma resposta baseada em pyth muito simples, semelhante à Python
fonte
, 12 caracteres / 21 bytes
Try it here (Firefox only).
Resposta não competitiva, 9 caracteres / 18 bytes
Try it here (Firefox only).
fonte
Ruby, 35 bytes
fonte
TI-Basic (TI-84 Plus CE), 42 bytes
fonte