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

注:正確な除数ではないビット長について心配する必要はありません。

4

2 に答える 2

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]
于 2012-09-29T16:52:11.490 に答える
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
于 2012-09-29T16:46:10.343 に答える