Dado um número, determine se é um número dobrável.
Um número dobrável é um número tal que, se você pegar a representação binária e "dobrar" ao meio, isso é o resultado da multiplicação XNOR da primeira metade do número e da segunda metade com os dígitos ao contrário, você obterá zero.
Se o número tiver um número ímpar de dígitos em binário, o dígito do meio deverá ser 1 e será ignorado ao dobrar.
Como isso pode ser um pouco confuso, darei alguns exemplos:
178
A representação binária de 178 é
10110010
Para dobrar isso, primeiro dividimos ao meio
1011 0010
Invertemos a segunda metade
1011
0100
E nós não temos as duas metades:
0000
Isso é zero, então esse é um número dobrável.
1644
A representação binária de 1644 é
11001101100
Para dobrar isso, primeiro dividimos ao meio
11001 1 01100
O bit do meio é 1, então jogamos fora.
11001 01100
Invertemos a segunda metade
11001
00110
E nós não temos as duas metades:
00000
Isso é zero, então esse é um número dobrável.
4254
A representação binária de 4254 é
1000010011110
Para dobrar isso, primeiro dividimos ao meio
100001 0 011110
O bit do meio é 0, então esse não é um número dobrável.
Tarefa
Sua tarefa é obter um número positivo e retornar uma verdade se o número estiver dobrando e falso se não estiver. Isso é código de golfe, então tente manter a contagem de bytes baixa.
Casos de teste
Aqui estão os primeiros 99 números dobráveis:
[1, 2, 6, 10, 12, 22, 28, 38, 42, 52, 56, 78, 90, 108, 120, 142, 150, 170, 178, 204, 212, 232, 240, 286, 310, 346, 370, 412, 436, 472, 496, 542, 558, 598, 614, 666, 682, 722, 738, 796, 812, 852, 868, 920, 936, 976, 992, 1086, 1134, 1206, 1254, 1338, 1386, 1458, 1506, 1596, 1644, 1716, 1764, 1848, 1896, 1968, 2016, 2110, 2142, 2222, 2254, 2358, 2390, 2470, 2502, 2618, 2650, 2730, 2762, 2866, 2898, 2978, 3010, 3132, 3164, 3244, 3276, 3380, 3412, 3492, 3524, 3640, 3672, 3752, 3784, 3888, 3920, 4000, 4032, 4222, 4318, 4462, 4558]
0
, então não. (Talvez valha a pena ter um terceiro exemplo funcionava assim embora.) O mesmo vale para 18.