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 colSumsla 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 decreasingla orderfonction, ce qui était nécessaire pour que l'ordre souhaité orderaugmente par défaut, puis je me souvenais de la revfonction permettant d'inverser un vecteur. EUREKA !!! La dernière modification de la solution finale était functionde pryr::fsauver 2 autres octets
function(x)rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))])