Tales of Verifier

テストエンジニアが自分の将来に不具合が起こらないことを確かめ合うRPG

rubyでテスト駆動ProjectEuler:Problem1

Problem1

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

ナベアツの和。

テスト
require 'test/unit'
require './euler1.rb'

class Euler1 < Test::Unit::TestCase

  def test_euler1
    assert_equal(euler1(10), 23)
  end

end

Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術

Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術

にあったテストのテンプレをパクってみた
問題文にあった例をそのままテストに。

コード
def euler1(max)
  ans = 0
  for i in 3..max-1
    if i % 3 == 0 or i % 5 == 0 then
      ans = ans + i
    end
  end
  return ans
end

工夫も何もないコードだけど大丈夫でしょう。

テストしてみる
$ ruby euler1-test.rb  
Run options: 

# Running tests:

Finished tests in 0.011532s, 86.7152 tests/s, 86.7152 assertions/s.
1 tests, 1 assertions, 0 failures, 0 errors, 0 skips

ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]

通った。(失敗してけっこう悩んだのは内緒だ)

いよいよ答えを求める

irbでloadしたんだけど、ファイルに直接数値を渡してprintさせる方法があるはず。

$ irb
irb(main):001:0> load './euler1.rb'
=> true
irb(main):002:0> euler1(1000)
=> ##答え##

うまくいきました。