module Baseconv

Constants

CHARS
InvalidRadix
MAX
MIN
VERSION

Public Instance Methods

convert(digits, from_base:, to_base:) click to toggle source

Convert

Convert the digits representation of a number from a given base to another.

# 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:) click to toggle source

Value to Representation

Convert a positive number n to its digit representation in base b.

# 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:) click to toggle source

Representation to Value

Compute the number given by digits in base b.

# 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