Actions
Feature #18762
openAdd an Array#undigits that compliments Integer#digits
Status:
Open
Assignee:
-
Target version:
-
Description
I've found Integer#digits convenient and useful but several times have needed to go from the place-value notation back to an Integer after manipulation and wished there was a complimentary Array#undigits.
class Array
def undigits(base = 10)
each_with_index.sum do |digit, exponent|
digit * base**exponent
end
end
end
42.digits.undigits
#=> 42
42.digits(16).undigits(16)
#=> 42
Below is my stab at a Ruby implementation with behavior mirroring Integer#digits.
class Array
def undigits(base = 10)
base_int = base.to_int
raise TypeError, "wrong argument type #{base_int.class} (expected Integer)" unless base_int.is_a?(Integer)
raise ArgumentError, 'negative radix' if base_int.negative?
raise ArgumentError, "invalid radix #{base_int}" if base_int < 2
each_with_index.sum do |digit, exponent|
raise MathDomainError, 'out of domain' if digit.negative?
digit * base_int**exponent
end
end
end
Actions
Like0
Like0Like0Like0Like0Like0Like0Like0Like0