R , 132 96 94 88 84 75 73 53 51 байт
-20 завдяки реалізації J.Doe ще -2 завдяки Джузеппе
function(x)x[order(colSums(sapply(x,intToBits)<1))]
Моя оригінальна публікація:
pryr::f(rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))]))
Спробуйте в Інтернеті!
Я спробував кілька різних методів, перш ніж дійти до цього результату.
Матричний метод: Створено матрицю з двома стовпцями, один стовпець з вхідним вектором, одну з суми двійкового подання, потім я відсортував за сумою двійкового.
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),]}
Нематрична: Усвідомлена Я могла викинути матричну функцію і замість цього створити вектор бінарних значень, підсумувати їх, упорядкувати їх, а потім використати впорядковані значення для зміни порядку введення вектора.
function(x){m=colSums(sapply(x,function(y){as.integer(intToBits(y))}));x[order(m,decreasing=T)]}
Незначні зміни
function(x){m=colSums(sapply(x,function(y)as.double(intToBits(y))));x[order(m,decreasing=T)]}
Більш незначні зміни Перетворення всієї речі в один рядок коду замість двох розділених крапкою з комою.
function(x)x[order(colSums(sapply(x,function(y)as.double(intToBits(y)))),decreasing=T)]
Метод підсумовування Замість того, щоб додавати стовпці із colSums
створеної компанією двійкової матриці sapply
, я додав елементи в стовпчик перед sapply
"завершеним".
function(x)x[order(sapply(x,function(y)sum(as.double(intToBits(y)))),decreasing=T)]
Зниження до Rev I дуже хотів скоротити зменшується, але R пронизливих у мене , якщо я намагаюся скоротити decreasing
в order
функції, яка необхідна для того, щоб отримати замовлення бажано , як по order
замовчуванням для збільшення, то я згадав rev
функцію зворотного вектора. EUREKA !!! Остання зміна в остаточному рішенні було function
до , pryr::f
щоб зберегти більше 2 байта
function(x)rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))])