Как Вы создаете целые числа 0.. 9 и математические операторы + - * / в к двоичным строкам. Например:
0 = 0000,
1 = 0001,
...
9 = 1001
Существует ли способ сделать это с Ruby 1.8.6, не пользуясь библиотекой?
Вам доступны Integer # to_s (base)
и String # to_i (base)
.
Целое число # to_s (основание)
преобразует десятичное число в строку, представляющую число в указанной базе:
9.to_s(2) #=> "1001"
, в то время как обратное получается с помощью Строка # to_i (основание)
:
"1001".to_i(2) #=> 9
Если вы работаете только с однозначными цифрами 0–9, скорее всего, будет быстрее построить таблицу поиска, так что вам не придется каждый раз вызывать функции преобразования.
lookup_table = Hash.new
(0..9).each {|x|
lookup_table[x] = x.to_s(2)
lookup_table[x.to_s] = x.to_s(2)
}
lookup_table[5]
=> "101"
lookup_table["8"]
=> "1000"
Индексирование в эту хеш-таблицу с использованием целочисленного или строкового представления числа приведет к его двоичному представлению в виде строки.
Если вам требуется, чтобы двоичные строки состояли из определенного количества цифр (сохраняйте ведущие нули), измените x.to_s (2)
на sprintf "% 04b", x
(где 4
- минимальное количество цифр для использования).
Подхватывая идею bta о таблице поиска, вы можете создать таблицу поиска с помощью блока. Значения генерируются при первом обращении к ним и сохраняются на потом:
>> lookup_table = Hash.new { |h, i| h[i] = i.to_s(2) }
=> {}
>> lookup_table[1]
=> "1"
>> lookup_table[2]
=> "10"
>> lookup_table[20]
=> "10100"
>> lookup_table[200]
=> "11001000"
>> lookup_table
=> {1=>"1", 200=>"11001000", 2=>"10", 20=>"10100"}