lambda(m, n) do seed = (rand(2).even?) ? 0b0 : 0b1 num_bit_1_left = (seed == 0b1) ? n-1 : n bits_length = 1 (m-1).times do bit_mask = if num_bit_1_left > 0 ((m - bits_length) > num_bit_1_left) ? ((rand(2).even?) ? 0b0 : 0b1) : 0b1 else 0b0 end seed = (seed << 1) | (bit_mask >> bits_length) # ETO NO TENA RESAKA BITWISE num_bit_1_left -= 1 if bit_mask == 0b1 bits_length += 1 end seed end.call(m_value, n_value)