R , 132 96 94 88 84 75 73 53 51 바이트
J.Doe의 구현 덕분에 -20 Giuseppe 덕분에 -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)]
Sum Method에colSums
의해 생성 된 이진 행렬로 열을 추가하는 대신 "완료" sapply
전에 열의 요소를 추가했습니다 sapply
.
function(x)x[order(sapply(x,function(y)sum(as.double(intToBits(y)))),decreasing=T)]
레브로 감소 정말 감소 단축 싶었지만, 나 한테 R의 울음 소리가 나는 단축하려고하면 decreasing
에 order
순서대로 원하는 얻을 필요했다 기능, order
증가 기본값은 다음 내가 기억 rev
하는 벡터를 반전하는 기능. 유레카!!! 최종 솔루션의 마지막 변경은 2 바이트를 더 절약하는 것이 었 function
습니다pryr::f
function(x)rev(x[order(sapply(x,function(y)sum(as.double(intToBits(y)))))])