Sha256: 554872050533192f1c6dc14cc42951eb3f7c2c52f4ab8b55ee5c7ef38ab87fc3

Contents?: true

Size: 1.25 KB

Versions: 13

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

class Integer

  ROMAN_NUMERALS ||= {
    M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4,
    I: 1
  }.freeze

  def bit(bit)
    if bit.negative?
      mask = (1 << ~bit)
      self & ~mask
    else
      mask = (1 << bit)
      self | mask
    end
  end

  def bit?(bit)
    mask = (1 << bit)
    (self & mask) != 0
  end

  def bit_clear(bit)
    mask = (1 << bit)
    self & ~mask
  end

  def bitmask(mask)
    if mask.negative?
      self & mask
    else
      self | mask
    end
  end

  def bitmask?(mask)
    (self & mask) != 0
  end

  def factorial
    return 1 if zero?

    2.upto(self).inject(1) { |acc, i| acc * i }
  end

  def factors
    limit = Math.sqrt(self).floor

    (1..limit).each_with_object([]) do |i, array|
      next unless (self % i).zero?

      sq = (self / i)
      array.push(i)
      array.push(sq) if sq != i
    end
  end

  def of(&block)
    Array.new(self, &block)
  end

  def roman_numeral
    return '' if zero?
    return "-#{(-self).roman_numeral}" if negative?

    ROMAN_NUMERALS.each { |key, val| break "#{key}#{(self - val).roman_numeral}" if val <= self }
  end

  def to_time
    Time.at(self)
  end

  alias to_t to_time unless defined?(to_t)

end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
lite-ruby-1.0.14 lib/lite/ruby/integer.rb
lite-ruby-1.0.13 lib/lite/ruby/integer.rb
lite-ruby-1.0.12 lib/lite/ruby/integer.rb
lite-ruby-1.0.11 lib/lite/ruby/integer.rb
lite-ruby-1.0.10 lib/lite/ruby/integer.rb
lite-ruby-1.0.9 lib/lite/ruby/integer.rb
lite-ruby-1.0.8 lib/lite/ruby/integer.rb
lite-ruby-1.0.7 lib/lite/ruby/integer.rb
lite-ruby-1.0.6 lib/lite/ruby/integer.rb
lite-ruby-1.0.5 lib/lite/ruby/integer.rb
lite-ruby-1.0.4 lib/lite/ruby/integer.rb
lite-ruby-1.0.3 lib/lite/ruby/integer.rb
lite-ruby-1.0.2 lib/lite/ruby/integer.rb