Ieri mentre giocavo con mio figlio ho notato il numero nel suo trenino:
Quindi abbiamo che possono essere divisi in o
Sfida così semplice: dato un numero non negativo come input, restituisce valori di verità e falsità coerenti che rappresentano se la rappresentazione in stringa del numero (nella base 10 e senza zeri iniziali) può essere in qualche modo suddivisa in numeri che sono potenze di 2 .
Esempi:
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
Questo è code-golf , quindi può vincere il codice più breve per ogni lingua!
101
(falsa a causa dello 0) ... o dovrebbe essere ancora vero ( 1 - 01
)?
101
caso con le risposte attuali e tutti ritornano true
, perché può essere suddiviso in 1-01
entrambi i poteri di 2, quindi considererò quel caso come veritiero.
log2(n)
non contiene cifre decimali dopo la virgola. 2) Controlla se n AND (n-1) == 0
. 3) Creare un elenco di quadrati e verificare se si n
trova in tale elenco.
int
tipo standard (4 byte), ma in realtà non mi dispiace se il tuo codice non supporta numeri molto grandi. Indica nella tua risposta i limiti del tuo codice.