Module: Baseconv
- Defined in:
- lib/baseconv.rb,
lib/baseconv/version.rb
Constant Summary collapse
- CHARS =
[*("0".."9"), *("a".."z"), *("A".."Z")].join.freeze
- MIN =
2- MAX =
CHARS.size
- InvalidRadix =
Class.new(StandardError)
- VERSION =
"0.1.0"
Class Method Summary collapse
-
.convert(digits, from_base:, to_base:) ⇒ Object
Convert.
-
.represent(number, in_base:) ⇒ Object
Value to Representation.
-
.value_of(digits, in_base:) ⇒ Object
Representation to Value.
Class Method Details
.convert(digits, from_base:, to_base:) ⇒ Object
Convert
Convert the digits representation of a number from a given base to another.
15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/baseconv.rb', line 15 def convert(digits, from_base:, to_base:) if from_base > MAX || to_base > MAX || from_base < MIN || to_base < MIN raise InvalidRadix, "cannot convert #{digits} from base #{from_base} to base #{to_base}" end if from_base < 37 && to_base < 37 return digits.to_s.to_i(from_base).to_s(to_base) end represent(value_of(digits.to_s, in_base: from_base), in_base: to_base) end |
.represent(number, in_base:) ⇒ Object
Value to Representation
Convert a positive number n to its digit representation in base b.
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/baseconv.rb', line 31 def represent(number, in_base:) digits = "" while number > 0 digits = CHARS[number % in_base] + digits number = number / in_base end digits end |
.value_of(digits, in_base:) ⇒ Object
Representation to Value
Compute the number given by digits in base b.
45 46 47 48 49 50 51 52 53 |
# File 'lib/baseconv.rb', line 45 def value_of(digits, in_base:) number = 0 digits.to_s.chars.each do |digit| number = in_base * number + CHARS.index(digit) end number end |