Rubyで等差数列と等比数列を書いてみる
inject便利だ。
# 等差数列 def f(a, d, c) c.times.map{|i| a + (d * i)} end p f(1, 1, 5) # 等比数列 def f2(a, r, c) c.times.map{|i| (a * r **i)} end p f2(1, 3, 5) # 等比数列 DP ver def f3(a, r, c) c.times.inject([]){|res, _| res << (res.last || a) * r} end p f3(1, 3, 5) # 等差数列 DP ver def f4(a, d, c) c.times.inject([]) do |res, _| if res.last res << res.last + d else res << a end end end p f4(1, 1, 5) # 等差数列 Enumerator::ArithmeticSequence ver # #stepがEnumeratorを継承したEnumerator::ArithmeticSequence を返す。 # Enumerator::ArithmeticSequenceは等差数列を表現するクラス p 1.step(by: 3).take(5)