Class: Fixnum

Inherits:
Object show all
Defined in:
lib/quality_extensions/color/rgb.rb,
lib/quality_extensions/fixnum/change_base.rb

Overview

Author

Tyler Rick

Copyright

Copyright © 2009, Tyler Rick

License

Ruby License

Submit to Facets?

Maybe

Developer notes

It’s probably already been implemented in a better, more efficient way. Will remove when I run across said better implementation…

Changes

++

Instance Method Summary collapse

Instance Method Details

#change_base(base, padding = 0, numerals = nil) ⇒ Object



28
29
30
31
32
33
# File 'lib/quality_extensions/fixnum/change_base.rb', line 28

def change_base(base, padding = 0, numerals = nil)
  numerals ||= (0..9).to_a + ('a'..'z').to_a
  numerals.map!(&:to_s)

  digits_for_new_base(base, padding).map {|digit| numerals[digit]}.join
end

#digits_for_new_base(base, padding = 0) ⇒ Object

Converts to a new base, returning the digits as an array.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/quality_extensions/fixnum/change_base.rb', line 12

def digits_for_new_base(base, padding = 0)
  digits = []
  if self == 0
    digits = [0]
  else
    remainder = self
    max_exponent = (Math.log(self)/Math.log(base)).to_i
    max_exponent.downto(0) do |exp|
      #puts "#{remainder} / #{base**exp}"
      digit, remainder = remainder.divmod(base**exp)
      digits << digit
    end
  end
  digits.pad(-padding, 0)
end

#to_rgbObject

:nodoc:



15
16
17
18
19
# File 'lib/quality_extensions/color/rgb.rb', line 15

def to_rgb
  a, b = divmod(65536)
  b, c = b.divmod(256)
  return [a, b, c]
end