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スクリプティングテクニック ―テスト駆動による日常業務処理術
- 作者: Brian Marick,菅野良二
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2008/02/23
- メディア: 単行本
- 購入: 9人 クリック: 214回
- この商品を含むブログ (40件) を見る
問題文にあった例をそのままテストに。
コード
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) => ##答え##
うまくいきました。