Hier, alors que je jouais avec mon enfant, j'ai remarqué le numéro dans son petit train:
Donc, nous avons qui peuvent être divisés en ou
Défi si simple: à partir d’un nombre non négatif en entrée, restituez des valeurs cohérentes de véracité et de falsey qui indiquent si la représentation sous forme de chaîne du nombre (en base 10 et sans zéros non majuscules) peut être en quelque sorte divisée en nombres qui ont une puissance de 2 .
Exemples:
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
C'est du code-golf , alors que le code le plus court pour chaque langue gagne!
code-golf
string
number
decision-problem
Charlie
la source
la source
int
type standard (4 octets), mais en réalité cela ne me dérange pas si votre code ne prend pas en charge les très grands nombres. Indiquez simplement dans votre réponse les limites de votre code.101
(fausseté à cause du 0) ... ou cela devrait-il toujours être vrai (1 - 01
)?101
cas avec les réponses actuelles et elles nous sont toutes retournéestrue
, car il peut être divisé en1-01
deux puissances de 2, je vais donc considérer ce cas comme une vérité.log2(n)
ne contient pas de chiffres décimaux après la virgule. 2) Vérifiez sin AND (n-1) == 0
. 3) Créez une liste de carrés-nrs et vérifiez sin
est dans cette liste.Réponses:
05AB1E ,
9 à8 octets-1 octet grâce à @Emigna en utilisant
Z
(max) pour la liste des 0 et 1 pour imiter uneany
commande pour1
(vérité).Essayez-le en ligne ou vérifiez tous les cas de test . (REMARQUE: l’
т
en-tête100
ne contient que les 100 premiers chiffres de la puissance, au lieu de la première quantité de puissance en entrée de 2 chiffres. Il fonctionne également avec la puissance de 2 en entrée, mais il est plutôt inefficace et peut délai d'attente sur TIO si l'entrée est suffisamment grande.)Explication:
la source
.œ.²1%O0å
(9 octets aussi). Le mien a échoué0
, cependant..²1%O0
c'est assez intelligent aussi. Je pensais utiliser lalog2
même chose.²DïQ
, mais il faudrait une carte autour pour pouvoir le faire pour chaque numéro, et cela ne fonctionnait pas pour Edge-Case0
.JavaScript (Node.js) , 54 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) ,
696458 octetsEssayez-le en ligne!
Entrez comme nombre. La partie logique est assez compliquée, donc aucune idée de la façon de la démêler et de s'en débarrasser
q
.-11 octets lors de la vérification de la puissance de 2.
la source
JavaScript (Node.js) ,
7569 octets-6 octets merci @Arnauld. Au plus 32 bits support
Essayez-le en ligne!
Entrée sous forme de chaîne.
la source
Gelée , 9 octets
Découvrez la suite de tests!
Alternative
Ne fonctionne pas pour les grands cas de test en raison de problèmes de précision.
Découvrez la suite de tests!
Comment?
Programme I
Programme II
la source
Python 2 ,
7270 octetsEssayez-le en ligne!
la source
JavaScript, 59 octets
Essayez-le en ligne!
Construit une regex comme
/^(1|0*2|0*4|0*8|0*16|0*32|…|0*1)+$/
des puissances de 2, et le testes
.Bien sûr, cela ne fonctionne que jusqu’à la précision des nombres JavaScript: les termes de l’expression rationnelle finissent par ressembler à
1.2345678e30
(ouInf
). Mais comme les puissances de 2 sont faciles à représenter avec précision en virgule flottante, elles ne seront jamais des entiers faux , ce qui serait plus disqualifiant, je pense.@th enregistré 14 octets. Neato!
la source
Python 2 , 85 octets
Essayez-le en ligne!
la source
Perl 6 ,
282423 octets-4 octets grâce à Jo King
Essayez-le en ligne!
Poignées puissances jusqu'à 2 31 .
la source
0*
hors de la partie interpoléeAPL (NARS), 154 caractères, 308 octets
La fonction pour l'exercice c'est h. L'algorithme ne semble pas exponentiel ou factoriel ... test:
la source
Python 2 , 57 octets
Essayez-le en ligne!
la source
Python 2 , 86 octets
Essayez-le en ligne!
la source
Ruby , 55 octets
Essayez-le en ligne!
La sortie est
0
si vrai etnil
si faux.la source
Ruby , 49 octets
Essayez-le en ligne!
Ne fonctionne que dans la théorie. Prend toujours pour les grandes valeurs de
n
la source
PHP, 101 octets
Je ne peux pas sembler avoir moins de 100; mais je pourrais l'obtenir à 100 si
101
était un cas de fausseté.variations:
PHP 5 ou plus ancien, 95 octets
la source
Rouge ,
212211 octetsEssayez-le en ligne!
Une autre soumission longue, mais je ne suis pas complètement insatisfaite, car il n’existe pas de fonction intégrée permettant de trouver toutes les chaînes en rouge.
Plus lisible:
la source
Axiome, 198 octets
ungolf et test
la source
Japt
-!
, 12 octetsPrend l'entrée sous forme de chaîne.
L'essayer
la source
0
cas produittrue
et donc des cas tels que la1010
sortietrue
.C # 157 octets
Vous pouvez l' essayer en ligne
la source
APL (NARS), 70 caractères, 140 octets
tester:
je n'essaie pas de faire d'autres gros chiffres ... Je dois noter que P n'est pas une partition normale, mais c'est une partition où tous les éléments sont des sous-ensembles qui ont un membre tous consécutifs, par exemple
noter qu'il manque l'élément ((ac) (b)) ou mieux ,, ¨ ('ac') 'b'
la source
POSIX ERE, 91 octets
Ceci est totalement tricher, basé sur le texte de grands nombres (pas vraiment besoin d'être manipulé par votre code) dans la question; il gère toutes les valeurs comprises dans la plage de taille des exemples. Évidemment, on peut étendre la gamme complète de types entiers de 32 ou 64 bits aux dépens de la taille. Je l'ai principalement écrit pour montrer comment le problème s'adapte naturellement à l'outil. Un exercice amusant consisterait à le réécrire en tant que programme qui génère l'ERE pour une plage arbitraire, puis le compare.
la source
C (gcc) ,
-DA=asprintf(&c,
+ 108 = 124 octetsEssayez-le en ligne!
Cela crée une expression rationnelle des puissances de 2 à 2 ** 32, puis fait correspondre la chaîne d'entrée à celle-ci.
la source
Powershell, 56 octets
Script de test:
Sortie:
Explication:
Construit une regex comme
^(0*1|0*2|0*4|0*8|0*16|0*32|…)+$
des puissances de 2 et le teste sur des arguments.la source
JavaScript (Node.js) , 56 octets
Essayez-le en ligne!
la source