La description
Étant donné un nombre, imprimez la quantité de 1
s qu'il a en représentation binaire.
Contribution
Un nombre >= 0
en base 10 qui ne dépassera pas le nombre le plus élevé que votre langue est capable de gérer.
Production
La quantité de 1
s dans la représentation binaire.
Condition gagnante
Le code le plus court gagne.
Rejeté
- Opérateurs au niveau du bit. D'autres opérateurs, comme l'addition et la multiplication, sont autorisés.
- Fonctions de conversion de base intégrées.
Exemples
Input: Ouput:
56432 8
Input: Output:
45781254 11
Input: Output:
0 0
Réponses:
APL,
912 caractèresCela suppose que l'interpréteur utilise des entiers 32 bits et qu'il
⎕IO
est défini sur 0 (ce qui signifie que le monadique⍳
commence par 0, plutôt que 1). J'ai utilisé la version 32 bits de Dyalog APL .Explication, de droite à gauche:
⍳32
génère un vecteur des premiers32
entiers (comme expliqué précédemment, car⎕IO
étant 0, ce vecteur commence par 0).*
est la fonction de puissance. Dans ce cas, il génère2
à la puissance de chaque élément du vecteur fourni comme argument de droite.÷
est la fonction divisée par. Il nous donne⎕
(entrée utilisateur évaluée) divisé par chaque élément du vecteur à sa droite (chaque puissance de deux).⌊
pose chaque élément de l'argument à sa droite.2|
nous donne le reste de chaque élément de sa droite divisé par2
./
réduit (replie) son argument de droite en utilisant la fonction à sa gauche+
,.Plus tout à fait 9 caractères. :(
Ancienne version sans règles:
la source
Built-in base conversion functions
contraint?Brainbool , 2
L'interprétation la plus raisonnable, à mon avis (et ce que la plupart des réponses utilisent) du "plus grand nombre que votre langue est capable de gérer" est "le plus grand nombre que votre langue supporte nativement ". Brainbool est un dérivé de brainfuck qui utilise des bits plutôt que des octets, et prend l'entrée et la sortie en binaire (
0
et en1
caractères) plutôt qu'en codes de caractères. Le plus grand nombre soutenu nativement est donc1
, et le plus petit est0
, qui ont des poids de Hamming1
et0
respectivement.Brainbool a été créé en 2010, selon Esolang.
la source
J, 13 caractères
(+ le nombre de chiffres du nombre)
Utilisation: remplacez le
n
dans le programme par le numéro à tester.Exemples:
Il y a probablement un moyen de réorganiser cela pour que le nombre puisse être placé au début ou à la fin, mais c'est ma première entrée J et ma tête me fait mal maintenant.
Explication (principalement pour que je la comprenne à l'avenir)
i.32
- crée un tableau des nombres 1 à 322^
- transforme la liste en pouvoirs de deux 1 à 4294967296n%
- divise le numéro d'entrée par chaque élément de la liste<.
- arrondit tous les résultats de la division au nombre entier suivant2|
- identique%2
à la plupart des langues - renvoie 0 si pair et 1 si impair+/
- totalise les éléments de la liste (qui ne sont plus que des 1 ou des 0)la source
Brainfuck, 53 personnages
Il manquait une solution Brainfuck obligatoire, alors j'ai fait celle-ci:
Prend le nombre de la cellule 1 et met le résultat dans la cellule 6.
Version non inscrite et commentée:
la source
Python 2.6, 41 caractères
note: Mon autre réponse utilise lambda et récursivité et celle-ci utilise une boucle while. Je pense qu'ils sont suffisamment différents pour justifier deux réponses.
la source
Ruby, 38 caractères
Une autre solution utilisant ruby et la même approche récursive que Steven.
la source
GolfScript,
1716 caractèresModifier: la nouvelle version enregistre 1 caractère en utilisant l'opération de liste au lieu de plier (la version d'origine était
~{.2%\2/.}do]{+}*
, la version à comptage direct:)~0\{.2%@+\2/.}do;
.la source
C, 45
Rien de vraiment spécial ici pour jouer au golf en C: type de retour implicite, type entier implicite pour les paramètres.
la source
Python 2.6, 45 caractères
la source
def
au lieu d'un lambda.print b(input())
. Il est acceptable de renvoyer la valeur et de prendre "input" comme arguments pour les fonctions.Perl,
454336 caractèresMerci à Howard pour 45-> 43 et à User606723 pour 43-> 36.
la source
$n=int($n/2)
2 caractères plus courts.$n=<>;while($n){$_+=$n%2;$n/=2}print
Cela continuera à boucler jusqu'à ce que $ n / 2 soit finalement assez proche de 0, mais nous en soucions-nous? ;)Perl, 30 caractères
Basé sur la solution de PhiNotPi , avec un peu de golf supplémentaire. Exécutez avec
perl -M5.010
pour activer la fonction Perl 5.10say
.la source
$=
variable spéciale fait-elle quelque chose de spécial dans votre programme, ou s'agit-il simplement d'une autre variable ordinaire?$=
ne prend que des valeurs entières, donc son utilisation me fait économiser un anint
.Lisp commun, 12 caractères
(en supposant un nom de variable de 1 caractère - c'est-à-dire: 11 + longueur de nombre)
Ce n'est pas une fonction de conversion de base, donc cela devrait fonctionner:
Exemples:
(Utilisation de GNU CLISP.)
la source
C,
61 60 5753 caractèresLe corps de la fonction ne comporte que 38 caractères. Edit : opérateur binaire supprimé Edit : mettre
printf
hors de la boucle comme suggéré dans les commentaires Edit : passer à la déclaration K&R; aussi, ce n'est plus spécifique au C99la source
dc - 26 caractères
C'est assez long, principalement en raison du manque de constructions de boucles dans
dc
.Continue d'ajouter le modulo 2 du nombre et de diviser le nombre par jusqu'à ce qu'il atteigne zéro. Peut gérer des entiers arbitrairement longs.
Exemple:
la source
C, 66 caractères
Remarque: nécessite gcc ou un compilateur compatible gcc (par exemple ICC, clang).
Pour certains CPU, se
__builtin_popcount
compile en une seule instruction (par exemplePOPCNT
sur x86).la source
__builtin_popcount
en œuvre du comptage de1
s est elle-même effective ? Si c'est le cas, bien que ce ne soit pas strictement faux selon les règles, je ne pense vraiment pas que ce soit une entrée équitable.printf
sans include préalable.C++
JavaScript,
78 7271 caractèresJe publierai ma solution initiale que j'ai trouvée avant de poster la question également. Il existe déjà une bien meilleure réponse JavaScript :)
http://jsfiddle.net/Mk8zd/1/
L'idée vient de certaines "cartes de lecture d'esprit" qui vous permettent d'obtenir le nombre que quelqu'un d'autre a en tête, en leur montrant des cartes et en leur laissant dire sur quelles cartes leur numéro est apparent.
Cela fonctionne parce que chaque nombre est une combinaison unique de
1
s /0
s en binaire. Ma solution vérifie sur quelles "cartes" le nombre est apparent afin de déterminer combien1
il en a. Ce n'est tout simplement pas très efficace, cependant ...J'ai trouvé ce document qui décrit la technique de lecture mentale.
la source
Haskell (60 caractères)
la source
PHP, 57
Cela suppose que
$n
détient la valeur à tester.PHP, 55 (solution alternative)
Encore une fois, cela suppose que
$n
détient la valeur à tester. Ceci est une alternative car il utilise l'opérateur or pourfloor
the input.Les deux solutions fonctionnent et ne provoquent pas d'avis.
la source
Ocaml, 45 caractères
Basé sur la solution de @Leah Xue. Trois espaces pourraient être supprimés et il est légèrement plus court (~ 3 caractères) pour utiliser la fonction au lieu de if-then-else.
la source
Mathematica 26
la source
Scala, 86 characters
Usage:
scala O 56432
la source
D (70 chars)
la source
R, 53 caractères
o=function(n){h=n%/%2;n%%2+if(h)o(h)else 0};o(scan())
Exemples:
Si la saisie du nombre ne fait pas partie du nombre de caractères, il s'agit de 43 caractères:
o=function(n){h=n%/%2;n%%2+if(h)o(h)else 0}
avec des cas de test
la source
OCaml, 52 caractères
la source
Schème
J'ai un peu poli les règles pour ajouter au défi. La fonction ne se soucie pas de la base du nombre car elle utilise sa propre échelle binaire. J'ai été inspiré par le fonctionnement de la conversion analogique-numérique. J'utilise simplement la récursion simple pour cela:
la source
La lecture d'un nombre en binaire ou l'impression du nombre à partir du binaire n'est-elle pas une «fonction de conversion de base intégrée», invalidant ainsi chaque réponse ci-dessus qui
print
est un entier? Si vous autorisez la lecture et l'impression d'un entier, comme presque toutes les réponses ci-dessus, alors je ferai des réclamations en utilisant une fonction intégréepopcount
:Haskell, 50
Un module a été
popCount
ajouté auData.Bits
module pour GHC v7.2.1 / v7.4.1 cet été (voir les tickets concernant le primop et la liaison ).Je ne peux pas battre les scores Python et Perl ci-dessus en utilisant malheureusement leurs modules
GMPY
ouGMP::Mpz
pour GMP, bien que GMP offre également une fonction popcount .la source
JavaScript,
49474542 octetsDémo: http://jsfiddle.net/hcYdx/4/
Édition 1: supprimez
q
et utilisez~~
pour arrondir, enregistrez 2 caractères.Edit 2: utilisez l'
|0
opérateur d'arrondi au lieu de~~
pour enregistrer les parenthèses (2 caractères).Edit 3: simplify
n>0
ton
and combine withn=n/2|0
to make entire condition; now have wasted statement space :(la source
|0
a bitwise operator?|
is bitwise operator... it is disallowed. Time to doMath.round
:-)Java 7, 36 bytes
Because of course this, of all things, is something that Java has a builtin for...
la source
bitCount
operates under the hood.TI-Basic (TI-84 Plus CE), 30 bytes
TI-Basic is a tokenized language, all tokens but
remainder(
are one-byte, remainder is twola source
PHP, 36 bytes
Assumes
$n
is the number to be tested, shows a PHP Notice for$o
, and doesn't exactly work when$n
is 0 (outputs nothing).PHP, 53 bytes
Accepts command-line input, doesn't show a PHP Notice, and outputs correctly for 0.
la source