Вот полный код для кодирования и декодирования логических значений, используя решение LBg :
class SomeClass
@@letters = (('a'..'z').to_a+('A'..'F').to_a)
def self.decode str
str.chars.map do |c|
c = @@letters.index(c).to_s(2)
while c.length < 5
c = "0#{c}"
end
c
end.join('').split('').map do |c|
if c == '1'
true
else
false
end
end
end
def self.encode *bools
str = ''
until bools.length == 0
five = ''
5.times do
five += bools.length > 0 ? (bools.shift() ? '1' : '0') : '0'
end
str += @@letters[five.to_i(2)]
end
str
end
end
Это нормально, что я дополняю массив логических значений дополнительными логическими значениями, потому чтов моей программе я точно знаю, сколько у меня логических значений, чтобы я мог обрезать декодированный массив.