Ontem, enquanto brincava com meu filho, notei o número em seu trem de brinquedo:
Portanto, temos que podem ser divididos em ou
Desafio tão simples: dado um número não negativo como entrada, retorne valores de verdade e falsey consistentes que representam se a representação em cadeia do número (na base 10 e sem zeros à esquerda) pode ou não ser dividida em números com potências de 2 .
Exemplos:
4281 truthy (4-2-8-1)
164 truthy (16-4 or 1-64)
8192 truthy (the number itself is a power of 2)
81024 truthy (8-1024 or 8-1-02-4)
101 truthy (1-01)
0 falsey (0 cannot be represented as 2^x for any x)
1 truthy
3 falsey
234789 falsey
256323 falsey (we have 256 and 32 but then 3)
8132 truthy (8-1-32)
Tests for very large numbers (not really necessary to be handled by your code):
81024256641116 truthy (8-1024-256-64-1-1-16)
64512819237913 falsey
Este é o código-golfe ; portanto, pode ganhar o código mais curto para cada idioma!
code-golf
string
number
decision-problem
Charlie
fonte
fonte
int
tipo padrão (4 bytes), mas na verdade não me importo se o seu código não suportar números muito grandes. Apenas indique na sua resposta as limitações do seu código.101
(falso por causa do 0) ... ou isso ainda deve ser verdade (1 - 01
)?101
caso com as respostas atuais e todas elas retornamtrue
, porque pode ser dividido em1-01
duas potências de 2, então considerarei esse caso verdadeiro.log2(n)
não contém dígitos decimais após a vírgula. 2) Verifique sen AND (n-1) == 0
. 3) Crie uma lista de quadrados-nrs e verifique sen
está nessa lista.Respostas:
05AB1E ,
98 bytes-1 byte, graças a @Emigna , usando
Z
(max) para a lista de 0s e 1s para imitar umany
comando para1
(verdade).Experimente online ou verifique todos os casos de teste . (OBSERVAÇÃO: O
т
cabeçalho serve100
apenas para obter as 100 primeiras potências de 2 números, em vez da primeira quantidade de entrada de potência de 2 números. Ele funciona com a quantidade de entrada de potência 2, mas é bastante ineficiente e pode tempo limite no TIO se a entrada for grande o suficiente.)Explicação:
fonte
.œ.²1%O0å
(9 bytes também). A minha falhou0
, no entanto..²1%O0
é muito inteligente. Pensei em usarlog2
assim.²DïQ
, mas seria necessário um mapa para fazer isso para cada número e, de fato, não funcionou para casos extremos0
.JavaScript (Node.js) , 54 bytes
Experimente online!
fonte
JavaScript (Node.js) ,
696458 bytesExperimente online!
Insira como número. A parte lógica é bastante complicada, por isso não faz ideia de como desembaraçar e se livrar
q
.-11 bytes, jogando a verificação de potência de 2.
fonte
JavaScript (Node.js) ,
7569 bytes-6 bytes obrigado @Arnauld. No máximo, suporte de 32 bits
Experimente online!
Entrada como uma string.
fonte
Geléia , 9 bytes
Confira a suíte de testes!
Alternativo
Não funciona para os grandes casos de teste devido a problemas de precisão.
Confira a suíte de testes!
Quão?
Programa I
Programa II
fonte
Python 2 ,
7270 bytesExperimente online!
fonte
JavaScript, 59 bytes
Experimente online!
Constrói uma regex semelhante a
/^(1|0*2|0*4|0*8|0*16|0*32|…|0*1)+$/
potências de 2 e a testas
.Somente funciona com a precisão dos números JavaScript, é claro: eventualmente os termos no regex serão parecidos com
1.2345678e30
(ouInf
). Mas como potências de 2 são fáceis de representar com precisão em ponto flutuante, elas nunca serão números inteiros errados , o que seria mais desqualificante, eu acho.@tsh salvou 14 bytes. Neato!
fonte
Python 2 , 85 bytes
Experimente online!
fonte
Perl 6 ,
282423 bytes-4 bytes graças a Jo King
Experimente online!
Lida com potências até 2 31 .
fonte
0*
para fora da parte interpoladaAPL (NARS), 154 caracteres, 308 bytes
A função para o exercício é h. O algoritmo não parece exponencial ou fatorial ... test:
fonte
Python 2 , 57 bytes
Experimente online!
fonte
Python 2 , 86 bytes
Experimente online!
fonte
Ruby , 55 bytes
Experimente online!
A saída é
0
verdadeira enil
falsa.fonte
Ruby , 49 bytes
Experimente online!
Só funciona em teoria. Leva uma eternidade para grandes valores de
n
fonte
PHP, 101 bytes
Não parece conseguir isso abaixo de 100; mas eu poderia chegar a 100 se
101
fosse um caso falso.variações:
PHP 5 ou mais, 95 bytes
fonte
Vermelho ,
212211 bytesExperimente online!
Outro envio longo, mas não estou totalmente insatisfeito, porque não há um recurso interno para encontrar todas as substrings em vermelho.
Mais legível:
fonte
Axioma, 198 bytes
ungolf e teste
fonte
Japonês
-!
, 12 bytesRecebe a entrada como uma sequência.
Tente
fonte
0
caso é geradotrue
e, portanto, casos como1010
também são geradostrue
.Bytes C # 157
Você pode experimentá-lo online
fonte
APL (NARS), 70 caracteres, 140 bytes
teste:
Eu não tento fazer outros números maiores ... Eu tenho que observar que P não é partição normal, mas é uma partição em que todos os elementos são subconjuntos que têm membros consecutivos, por exemplo
note que está ausente o elemento ((ac) (b)) ou melhor ,, ¨ ('ac') 'b'
fonte
POSIX ERE, 91 bytes
Isso é uma trapaça total, com base no grande número de textos (não é realmente necessário ser tratado pelo seu código) na pergunta; ele lida com todos os valores no intervalo de tamanho dos exemplos. Obviamente, pode ser estendido até a faixa completa de tipos inteiros de 32 ou 64 bits, à custa do tamanho. Eu o escrevi principalmente como uma demonstração de como o problema se encaixa naturalmente na ferramenta. Um exercício divertido seria reescrevê-lo como um programa que gera o ERE para um intervalo arbitrário e depois o compara.
fonte
C (gcc) ,
-DA=asprintf(&c,
+ 108 = 124 bytesExperimente online!
Isso cria uma regex dos poderes de 2 até 2 ** 32 e, em seguida, combina a string de entrada com ela.
fonte
PowerShell, 56 bytes
Script de teste:
Saída:
Explicação:
Constrói um regex semelhante a
^(0*1|0*2|0*4|0*8|0*16|0*32|…)+$
potências de 2 e testa-o em argumentos.fonte
JavaScript (Node.js) , 56 bytes
Experimente online!
fonte