R , 132 96 94 88 84 75 73 53 51 octets
-20 grâce à la mise en œuvre de J.Doe -2 plus grâce à Giuseppe
function(x)x[order(colSums(sapply(x,intToBits)<1))]
Mon post original:
pryr::f(rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))]))
Essayez-le en ligne!
J'ai essayé plusieurs méthodes différentes avant d'arriver à ce résultat.
Méthode matricielle: Création d'une matrice à deux colonnes, une colonne avec le vecteur d'entrée, une de la somme de la représentation binaire, puis j'ai trié sur la somme de binaire.
function(x){m=matrix(c(x,colSums(sapply(x,function(y){as.integer(intToBits(y))}))),nc=2,nr=length(x));m[order(m[,2],decreasing=T),]}
Non-Matrix: Réalisé, je pouvais jeter la fonction de matrice et créer un vecteur de valeurs binaires, les additionner, les ordonner, puis utiliser les valeurs ordonnées pour réorganiser le vecteur d'entrée.
function(x){m=colSums(sapply(x,function(y){as.integer(intToBits(y))}));x[order(m,decreasing=T)]}
Des changements mineurs
function(x){m=colSums(sapply(x,function(y)as.double(intToBits(y))));x[order(m,decreasing=T)]}
Autres modifications mineures Conversion de la totalité d'un élément en une ligne de code au lieu de deux séparées par un point-virgule.
function(x)x[order(colSums(sapply(x,function(y)as.double(intToBits(y)))),decreasing=T)]
Méthode Sum Au lieu d'ajouter les colonnes avec colSums
la matrice binaire créée par sapply
, j'ai ajouté les éléments de la colonne avant sapply
"terminé".
function(x)x[order(sapply(x,function(y)sum(as.double(intToBits(y)))),decreasing=T)]
Diminution de la valeur de revenant Je voulais vraiment raccourcir décroissant, mais R me reproche si j'essaie de raccourcir decreasing
la order
fonction, ce qui était nécessaire pour que l'ordre souhaité order
augmente par défaut, puis je me souvenais de la rev
fonction permettant d'inverser un vecteur. EUREKA !!! La dernière modification de la solution finale était function
de pryr::f
sauver 2 autres octets
function(x)rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))])