Inspiré par le quatrième problème de BMO2 2009 .
Étant donné un entier positif n en entrée ou un paramètre, renvoyer le nombre d'entiers positifs dont les représentations binaires se produisent sous forme de blocs dans l'expansion binaire de n .
Par exemple, 13 -> 6 car 13 en binaire est 1101 et il a des sous-chaînes 1101, 110, 101, 11, 10, 1
. Nous ne comptons pas les nombres binaires qui commencent par zéro et nous ne comptons pas zéro lui-même.
Cas de test
13 -> 6
2008 -> 39
63 -> 6
65 -> 7
850 -> 24
459 -> 23
716 -> 22
425 -> 20
327 -> 16
Vous pouvez prendre n comme l'un des éléments suivants:
- un nombre entier
- une liste de valeurs véridiques / fausses pour la représentation binaire
- une chaîne pour la représentation binaire
- une chaîne de base 10 (même si je ne sais pas pourquoi quelqu'un ferait cela)
Faites votre code aussi court que possible.
Réponses:
Python 3,
5450 octetsMerci à Rod et Jonathan Allan d'avoir économisé quatre octets.
la source
+1
de la plage versbin(i)
n
lui - même et doivent toujours exclure0
de notre nombre , nous pouvons au lieu toujours excluren
et toujours compter0
(NIE (n) commence'0b...'
), on peut donc supprimer la1,
et+1
tout à fait et le congébin(i)
comme est de sauver quatre octets Essayez en ligne!Gelée , 4 octets
Essayez-le en ligne!
Prend la saisie sous forme de liste de
0
s et1
s.Essayez-le en ligne avec des chiffres!
Explication:
Preuve que ça marche:
Ce programme reçoit un numéro d'entrée, N . La première chose que ce produit fait est, bien sûr, de prendre les sous-chaînes de N 2 ( N en base 2 ). Cela inclut les sous-chaînes en double commençant par 0 ou 1 .
Après cela, nous prenons simplement les sous-chaînes uniques en ne gardant que la première occurrence de chaque valeur dans la liste des sous-chaînes.
Ensuite, ce programme additionne les premiers éléments des listes, puis les deuxièmes éléments, puis les troisième, quatrième, etc. et si l'une des listes n'a pas un tel élément
0
est supposé. Ce que le défi demande est effectivement Combien de sous-chaînes uniques commençant par 1 ce nombre a-t-il dans sa forme binaire? . Puisque chaque premier élément qui doit être compté l'est1
, nous pouvons simplement additionner au lieu de filtrer les sous-chaînes appropriées.Maintenant, le premier élément de la liste résultante de la sommation décrite ci-dessus contient le décompte des premiers bits des sous-chaînes, donc nous simplement pop et finalement le retourner.
la source
Octave ,
6261 octetsEssayez-le en ligne!
Explication
Pour l'entrée
n
, le code teste tous les nombres de1
àn
pour voir si leur représentation binaire est une sous-chaîne de la représentation binaire de l'entrée.la source
05AB1E , 5 octets
Prend l'entrée comme une chaîne binaire.
L'en-tête convertit l'entrée entière en binaire pour faciliter les tests.
Essayez-le en ligne!
Explication
la source
bŒʒć}Ùg
mais non, c'est mieux.Perl 5 , 36 + 1 (
-p
) = 37 octetsEssayez-le en ligne!
Prend l'entrée comme une chaîne binaire.
la source
PowerShell ,
1039282 octetsEssayez-le en ligne!
Prend l'entrée comme un tableau de
1
et0
(vérité et falsey dans PowerShell). Boucle à travers$s
(c'est-à-dire, combien d'éléments dans le tableau d'entrée). À l'intérieur de la boucle, nous bouclons du numéro actuel (enregistré sous$i
) jusqu'à$s.count
. Chaque boucle interne, nous-join
la tranche de tableau dans une chaîne. Nous avons ensuitesort
avec le-u
drapeau nique (qui est plus courtselect
qu'avec le-u
drapeau nique et nous ne nous soucions pas qu'ils soient triés ou non), prenons ceux qui ne commencent pas0
et prenons le tout.count
. Cela reste sur le pipeline et la sortie est implicite.la source
JavaScript (ES6), 55 octets
Prend l'entrée comme une chaîne binaire.
Voici une triste tentative de le faire avec des nombres et des fonctions récursives:
Ancienne approche, 74 octets
Prend également l'entrée comme une chaîne binaire.
la source
Python 2 ,
11881 octetsMerci à @Rod pour avoir économisé 37 octets!
Prend l'entrée comme une chaîne binaire.
Essayez-le en ligne!
Python 2 , 81 octets
Merci à @Rod!
Prend l'entrée comme une chaîne binaire.
Essayez-le en ligne!
la source
set(...)
par{...}
etxrange
avecrange
+1
de la gamme à la tranche, et passer las.startswith
àint(s,2)
aimer ceGelée , 5 octets
Essayez-le en ligne!
Prend l'entrée comme une liste de 1 et de 0. Le pied de page du lien applique la fonction à chacun des exemples de l'article.
Jonathan Allan a souligné qu'il
ẆḄQTL
s'agit d'une alternative à 5 octets qui utilise l'T
atome qui trouve les indices de tous les éléments véridiques.Explication
Prenons l'exemple de bin (13) = 1101. L'entrée est
[1,1,0,1]
A pris l'idée de "vérité" (signe dans ce cas) de la réponse 05AB1E
la source
T
, avecẆḄQTL
R ,
8877 octetsEssayez-le en ligne!
Prend l'entrée comme une chaîne binaire.
à l'aide de
mapply
, génère un tableau de toutes les sous-chaînes de l'entrée.strtoi
les convertit en2
entiers de base , et je prends la somme de la conversion logique (!!
) des entrées dans le résultat.la source
Rétine ,
3729 octetsEssayez-le en ligne!Je viens d'essayer le
w
modificateur de Retina 1.0 . Edit: 8 octets enregistrés grâce à @MartinEnder. Explication:Convertissez de décimal en unaire.
Conversion d'unaire en binaire, en utilisant
#
pour0
et_
pour 1.Générer des sous - chaînes qui commencent par
1
, je veux dire,_
. Lew
modificateur correspond alors à toutes les sous-chaînes, pas seulement la plus longue à chaque démarrage_
, tandis que lep
modificateur déduplique les correspondances. Enfin, comme il s'agit de la dernière étape, le nombre de correspondances est renvoyé implicitement.la source
q
(oup
) en plus dew
. Vous n'avez pas non plus besoin de spécifierC
explicitement, car il s'agit du type d'étape par défaut s'il ne reste qu'une seule source.M
être le type de scène par défaut!C
c'est ceM
qui était. :)Pyth , 8 octets
Essayez-le ici!
Prend l'entrée comme une chaîne binaire.
.:
génère toutes les sous-chaînes,vM
évalue chacune (c'est-à-dire qu'elle convertit chacune en binaire),{
dédoublonne,<space>#
filtre par identité etl
obtient la longueur.la source
Wolfram Language (Mathematica) , 35 octets
Compter les sous-séquences uniques de la représentation binaire qui commencent par une, même si je ne suis pas sûr que ce code ait même besoin d'une explication.
Essayez-le en ligne!
la source
___
-il?Perl 6 , 47 octets
Essayez-le en ligne!
la source
Julia 0.6 , 37 octets
Essayez-le en ligne!
Juliafication de la réponse Python par J843136028 à l' aide
.
d'une application de fonction élément par élément avec diffusion. ( lien )la source
Java, 232 octets
Où n est l'entrée, b est la représentation binaire et l est une liste de toutes les sous-chaînes. Pour la première fois ici, vous devez absolument vous améliorer et n'hésitez pas à signaler toute erreur! Légèrement édité pour plus de lisibilité.
la source
String b=...,t
etint i=...,j,k
pour enregistrer les caractères pour les déclarations répétées du même type. Votre code ne serait pas non plus considéré comme une entrée car il s'agit d'un extrait de code, ni d'un programme complet ni d'un fragment fonctionnel, vous devez écrire une fonction ou envelopper votre code sous la forme lambdaAttaché , 35 octets
Essayez-le en ligne!
De manière équivalente:
Explication
J'expliquerai la deuxième version, car elle est plus facile à suivre (en étant explicite):
la source
Rubis
41 3627 octetsPrend une chaîne binaire en entrée
Est ultra-inefficace
Partiellement inspiré par cette réponse python 3
Essayez-le en ligne!
la source
Java 8,
160159158 octetsEntrée sous forme de chaîne binaire.
Il doit y avoir un chemin plus court ..>.>
Explication:
Essayez-le en ligne.
la source
C ++, 110 octets
Il s'agit d'une fonction récursive. Nous utilisons a
std::set
pour compter les valeurs, en ignorant les doublons. Les deux appels récursifs masquent les bits à gauche (f(n&i)
) et à droite (f(n/2)
), produisant éventuellement toutes les sous-chaînes sous forme d'entiers.Notez que si vous souhaitez l'appeler à nouveau,
s
doit être effacé entre les appels.Programme de test
Résultats
la source
J , 34 octets
Essayez-le en ligne!
la source
J , 15 octets
L'entrée est une liste binaire. Essayez-le en ligne!
la source
Perl 6 , 34 octets
Essaye-le
Étendu:
la source