2012-09-29 4 views
1

정수와 비트 길이를 취하여 해당 비트에 해당하는 정수 배열을 반환하는 메서드를 작성하고 싶습니다. 예를 들어정수를 비트 조작으로 정수 배열로 분해

:

decompose(100, 4) 
#=> [4, 12] 

because: 

100 is 01001100 in binary 
     / \ 
     0100 1100 
     4  12 

decompose(123456, 6) 
#=> [1, 8, 60, 0] 

because: 

123456 is 000001001000111100000000 in binary 
     /  |  |  \ 
      1  8  60  0 

참고 : 나는 정확한 약수없는 비트 길이에 대해 걱정할 필요가 없습니다.

+0

나는 당신이 바로 그 번호가 생각하지 않습니다. – sawa

답변

2
def decompose n, l, a = [] 
    n, r = n.divmod(2 ** l) 
    a.unshift(r) 
    n.zero? ? a : decompose(n, l, a) 
end 

decompose(100, 4) # => [6, 4] 
decompose(123456, 6) # => [30, 9, 0] 
0

어때?

def decompose(num, len) 
    num.to_s(2).chars.each_slice(len).map { |x| x.join.to_i(2) }.reverse 
end 

decompose(100, 4) 
#=> [4, 12] 

또는이 :

def decompose(num, len) 
    num.to_s(2).scan(/.{1,len}/).map { |x| x.to_i(2) }.reverse 
end 
관련 문제