module MoreMath::NumberifyStringFunction

def stringify_number(number, alphabet = 'a'..'z')

def stringify_number(number, alphabet = 'a'..'z')
  case
  when number < 0
    raise ArgumentError, "number is required to be >= 0"
  when number == 0
    return ''
  end
  alphabet = NumberifyStringFunction.convert_alphabet alphabet
  s = NumberifyStringFunction.compute_size(number, alphabet.size)
  k, m = alphabet.size, number
  result = ' ' * s
  q = m
  s.downto(1) do |i|
    r = q / k
    q = r * k < q ? r : r - 1
    result[i - 1] = alphabet[m - q * k - 1]
    m = q
  end
  result
end