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 colSums
von 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, decreasing
die order
Funktion zu verkürzen , was notwendig war, um die gewünschte Reihenfolge als order
Standard zu erreichen. Dann erinnerte ich mich an die rev
Funktion zum Umkehren eines Vektors. EUREKA !!! Die letzte Änderung in der endgültigen Lösung bestand function
darin pryr::f
, 2 weitere Bytes einzusparen
function(x)rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))])