Défi :
Comptez le nombre de uns 1
dans la représentation binaire de tous les nombres entre une plage.
Contribution :
Deux entiers positifs non décimaux
Production :
La somme de tous les 1
s dans la plage entre les deux nombres.
Exemple :
4 , 7 ---> 8
4 = 100 (adds one) = 1
5 = 101 (adds two) = 3
6 = 110 (adds two) = 5
7 = 111 (adds three) = 8
10 , 20 ---> 27
100 , 200 ---> 419
1 , 3 ---> 4
1 , 2 ---> 2
1000, 2000 ---> 5938
Je n'ai expliqué que le premier exemple, sinon cela aurait pris énormément d'espace si j'avais essayé de les expliquer pour chacun d'eux.
Remarque :
- Les nombres peuvent être séparés de plus de 1000
- Toutes les entrées seront valides.
- La sortie minimale sera de un.
- Vous pouvez accepter le nombre comme un tableau de deux éléments.
- Vous pouvez choisir la façon dont les numéros sont commandés.
Critères gagnants:
C'est le code-golf donc le code le plus court en octets pour chaque langue gagne.
IntRange
dans Kotlin,Range
dans Ruby)?1000 - 2000
donne 5938, mais de réduire le cas par 1000, le résultat diminue également de 1000:0-1000 = 4938
. PreuveRéponses:
JavaScript (ES6), 38 octets
Prend une entrée dans la syntaxe de curry
(a)(b)
.Essayez-le en ligne!
Commenté
la source
Python 2 , 47 octets
Essayez-le en ligne!
la source
>=
...Java (JDK 10) , 55 octets
Essayez-le en ligne!
la source
IntStream.range(a,b+1).map(Integer::bitCount).sum()
a->b->java.util.stream.IntStream.range(a,b+1).map(Integer::bitCount).sum()
, pour un total de 74 octets. Même si l'importation n'était pas obligatoire, les paramètres le sont, donc il faudrait écrirea->b->IntStream.range(a,b+1).map(Integer::bitCount).sum()
, ce qui compte pour 57 octetsa->b->IntStream.range(a,b+1).map(Long::bitCount).sum()
une amélioration de 1 octet. Marginal, mais toujours un.a->b->java.util.stream.IntStream.range(a,b+1).map(Long::bitCount).sum()
(71 octets).05AB1E , 4 octets
Essayez-le en ligne!
la source
Python 2 , 45 octets
Essayez-le en ligne!
la source
MATL ,
54 octetsEssayez-le en ligne!
Merci à Luis Mendo d'avoir enregistré un octet!
la source
R ,
4134 octetsEssayez-le en ligne!
Fortement inspiré de l'autre solution R de ngm . Cela utilise une approche différente après la conversion en bits. Un grand merci à Giuseppe pour avoir fait allusion à une solution possible de 34 octets.
la source
sum
vecteur mable - je posterai si vous / ngm ne le trouvez pas.sd
etvar
contraint tout ce qu'ils peuvent doubler.pryr::f
pour enregistrer 4 octets: tio.run/##K/qfZvu/…Gelée , 4 octets
Essayez-le en ligne!
Explication
la source
Pyth ,
87 octets1 octet merci à M. Xcoder.
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 16 octets
Essayez-le en ligne!
-1 merci à H.PWiz .
Argument gauche = min
Argument droit = max
la source
Python 3 ,
565452 octetsCela peut être joué plus imo.-2 octets grâce à Mr.Xcoder -2 plus d'octets grâce à MI WrightEssayez-le en ligne!
la source
Stax , 6 octets
Exécuter et déboguer
la source
Bash + utilitaires communs, 50
Essayez-le en ligne!
La conversion d'entiers en chaînes binaires est toujours un peu pénible en bash. L'approche ici est légèrement différente - convertissez les entiers en octaux, puis remplacez chaque chiffre octal par le nombre de 1 binaires qu'il contient. Ensuite, nous pouvons simplement additionner tous les chiffres convertis
la source
APL + WIN,
3326 octetsDemande le vecteur d'entiers:
Essayez-le en ligne! Gracieuseté de Dalog Classic
Explication:
la source
R ,
44 4037 octetsEssayez-le en ligne!
Précédemment:
la source
Octave avec boîte à outils de communication, 21 octets
Essayez-le en ligne!
Le code devrait être assez évident. Nombre d'éléments non nuls dans la représentation binaire de chacun des nombres de la plage.
Ce serait
@(a,b)nnz(dec2bin(a:b)-48)
sans la boîte à outils de communication.la source
Husk , 4 octets
Essayez-le en ligne!
Explication
la source
Rubis , 38 octets
Essayez-le en ligne!
la source
PHP, 97 octets
(bien sûr, cela peut être raccourci, mais je voulais utiliser les fonctions)
Essayez-le en ligne
Code
Explication
la source
$argv[0]
est le nom du programme ou "-"; Vous devriez travailler avec$argv[1]
et$argv[2]
. Et vous pouvez utiliser à lajoin
place deimplode
, raccourcir cela à 68 octets:<?=substr_count(join(array_map(decbin,range($argv[1],$argv[2]))),1);
PowerShell , 72 octets
Essayez-le en ligne!
Long à cause de la conversion en binaire
[convert]::ToString($_,2)
et de l'élimination des zéros-replace0
. Sinon, nous prenons simplement les numéros d'entrée, faisons une plage$x..$y
et pour chaque numéro de la plage, convertissons-le en binaire, supprimons les zéros, prenez-les.length
(c'est-à-dire le nombre de ceux qui restent) et ajoutez-le à notre$o
sortie.la source
count
placelength
:)count
sera toujours1
parce que nous comptons lalength
chaîne, pas un tableau.-replace0
est intelligent.Haskell , 42 octets
Essayez-le en ligne!
la source
Pip , 10 octets
Essayez-le en ligne!
Explication
la source
Proton ,
4037 octetsEssayez-le en ligne!
la source
Fusain , 10 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
Brachylog , 8 octets
Essayez-le en ligne!
Explication
la source
Bash + coreutils,
3832 octetsMerci à @Cowsquack d'avoir joué au golf sur 6 octets!
Essayez-le en ligne!
la source
seq -f2o%fp $*|dc|tr -cd 1|wc -c
K (ngn / k) ,
1913 octetsEssayez-le en ligne!
{
}
est une fonction avec des argumentsx
ety
!1+y
est la liste 0 1 ... yx_
supprime les x premiers éléments2\
code chaque int comme une liste de chiffres binaires de même longueur (ceci est spécifique à ngn / k)+/
somme+//
somme jusqu'à convergence; dans ce cas, somme de la somme de toutes les listes de chiffres binairesla source
Perl 6 ,
3230 octets-1 octets grâce à Brad Gillbert
Essayez-le en ligne!
Explication:
la source
[...](@_)
au lieu de($^a..$^b)
J ,
16, 1514 octets1 octet économisé grâce à FrownyFrog!
Essayez-le en ligne!
Explication:
Un verbe dyadique, l'argument de gauche est la borne inférieure
m
de la plage, la droite - la supérieuren
.la source
}.
mais toujours dans une fourchette et non dans un crochet. Merci!QBasic,
95938382 octets@DLosc m'a sauvé un
certainlot un des octets!Enregistré un autre octet en utilisant cette technique !
Langue du mois FTW!
Explication
Le dernier testcase de 1000 à 2000 fonctionne réellement, dans QBasic 4.5 fonctionnant sur Dosbox:
la source