• Source
    1. # -*- coding: utf-8 -*-
    2.  
    3. # 工夫した点・苦労した点・感想等(ご自由にお書きください):
    4. # ・
    5. # ・
    6.  
    7. class AnswerQ1
    8. def each
    9. return to_enum unless block_given?
    10. a, b = 0, 1
    11. loop do
    12. yield b
    13. a, b = b, a + b
    14. end
    15. end
    16.  
    17. def drop n
    18. # ここを適切に実装してテストが通るようにしてください。
    19. # ただし、以下の条件を満たすこと:
    20. # ・上記の `each` メソッドを必ず利用すること。
    21. # ・yield 文(yield 式)を必ず利用すること。
    22. # ・require 文を使用しないこと。
    23. # 桜先生からのワンポイントアドバイス:
    24. # ・each メソッドの実装を参考にすれば、そんなに難しくはないはずよ♪
    25. # ・return to_enum 〜 の行は、each メソッドからのコピペじゃ正常に動かないから、気をつけてね♪
    26. # ・実装方法はいくつかあるけれど、テストが失敗しなければどれでも正解よ♪
    27. end
    28. end
    29.  
    30. # ※これ以降は変更しないこと。
    31. if $0 == __FILE__
    32. require 'test/unit'
    33.  
    34. class AnswerQ1Test < Test::Unit::TestCase
    35. def setup
    36. @fib = AnswerQ1.new
    37. end
    38.  
    39. def test_each
    40. expected = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
    41. result = []
    42. @fib.each do |n|
    43. result << n
    44. break if result.size == 10
    45. end
    46. assert_equal(expected, result)
    47. end
    48.  
    49. def test_drop
    50. expected = [8, 13, 21, 34, 55]
    51. result = []
    52. @fib.drop(5) do |n|
    53. result << n
    54. break if result.size == 5
    55. end
    56. assert_equal(expected, result)
    57. end
    58.  
    59. def test_100th_fib
    60. expected = 354_224_848_179_261_915_075
    61. result = @fib.drop(99).first
    62. assert_equal(expected, result)
    63. end
    64. end
    65. end