R , 132 96 94 88 84 75 73 53 51 Bytes
-20 dank J.Does Implementierung -2 mehr dank Giuseppe
function(x)x[order(colSums(sapply(x,intToBits)<1))]
Mein ursprünglicher Beitrag:
pryr::f(rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))]))
Probieren Sie es online!
Ich habe verschiedene Methoden ausprobiert, bevor ich zu diesem Ergebnis kam.
Matrix-Methode: Erstellt eine zweispaltige Matrix, eine Spalte mit dem Eingabevektor, eine aus der Summe der Binärdarstellung, und sortiert dann nach der Summe der Binärdarstellungen.
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),]}
Nicht-Matrix: Es wurde erkannt, dass ich die Matrixfunktion wegwerfen und stattdessen einen Vektor von Binärwerten erstellen, diese summieren, ordnen und dann die geordneten Werte verwenden könnte, um den Eingabevektor neu zu ordnen.
function(x){m=colSums(sapply(x,function(y){as.integer(intToBits(y))}));x[order(m,decreasing=T)]}
Kleinere Änderungen
function(x){m=colSums(sapply(x,function(y)as.double(intToBits(y))));x[order(m,decreasing=T)]}
Kleinere Änderungen Konvertieren des gesamten Objekts in eine Codezeile anstelle von zwei durch ein Semikolon getrennten.
function(x)x[order(colSums(sapply(x,function(y)as.double(intToBits(y)))),decreasing=T)]
Summenmethode Anstatt die Spalten mit der colSumsvon erstellten binären Matrix hinzuzufügen sapply, habe ich die Elemente in der Spalte vor sapply"Fertig" hinzugefügt .
function(x)x[order(sapply(x,function(y)sum(as.double(intToBits(y)))),decreasing=T)]
Abnahme auf Umkehr Ich wollte eigentlich die Abnahme verkürzen, aber R quäkelt mich an, wenn ich versuche, decreasingdie orderFunktion zu verkürzen , was notwendig war, um die gewünschte Reihenfolge als orderStandard zu erreichen. Dann erinnerte ich mich an die revFunktion zum Umkehren eines Vektors. EUREKA !!! Die letzte Änderung in der endgültigen Lösung bestand functiondarin pryr::f, 2 weitere Bytes einzusparen
function(x)rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))])