Integer

整数かどうか判定したい

p 10.integer?
p 1.1.integer?

整数か偶数か判定したい

# 偶数ならtrue,奇数ならfalse
p 10.even?

整数か奇数か判定したい

# 奇数ならtrue,偶数ならfalse
p 11.odd?

整数の絶対値を取得したい

p 10.abs
p -10.abs

整数の値が0かを判定したい

p 0.zero?
p 10.zero?

2つの整数の最大公約数がほしい

p 2.gcd(7)

2つの整数の最大公約数と最小公倍数がほしい

p 3.gcdlcm(7)

起点となる整数から1ずつ減らしながらminまでブロックを繰り返したい

# self.downto(min) {|n|}
10.downto(1) {|n| p n}

起点となる整数から1ずつ増やしながらmaxまでブロックを繰り返したい

# self.upto(max) {|n|}
1.upto(10) {|n| p n}

起点となる整数から指定したstep数ずつ加算しながらlimitまでブロックを繰り返したい

# self.step(limit, step = 1) {|n|}
2.step(10, 2) {|n| p n}

Integer回数だけブロックを繰り返したい。ただし、回数に指定できるのは正の整数のみ

カウントは0からスタートする

# self.times {|n|}
10.times {|n| p n}

10進法から2進法、8進法、16進法に基数変換したい

String#%はsprintfと同じ

# 10進法<=>2進法
"%b" % 251
251.to_s(2)
0b11111011.to_s

# 10進法<=>8進法
"%o" % 8
8.to_s(8)
010.to_s

# 10進法<=>16進法
"%x" % 251
251.to_s(16)
0xfb.to_s

# 任意の位取り記法文字列を整数へ変換したい
"6z".to_i(36)
"18b".to_i(12)
"18b".to_i(16)
"101100".to_i(3)

ちなみにto_sの引数は2 <= x <= 36まで可能(この範囲を超えた引数を与えるとエラー)

階乗冪(かいじょうべき)、順列、階乗、組み合わせの値を求めたい

結論:自前で実装しろ。

モンキーパッチで書くならこんな感じ

class Integer
  def falling_factorial(m)
    return (0..(m - 1)).inject(1) {|r, k| r * (self - k)}
  end

  def rising_factorial(m)
    return (0..(m - 1)).inject(1) {|r, k| r * (self + k)}
  end

  alias permutation falling_factorial

  def factorial
    return self.permutation self
  end

  def combination(m)
    return (self.permutaton m) / (m.permutation m)
  end
end