# -*- coding: utf-8 -*-
# q1002_answer_1.py

# 使用した Python のバージョン：
# ・Python(Python 2.7.3)/Python3(Python 3.2.3)
# 工夫した点・苦労した点・感想等（ご自由にお書きください）：
# ・カウンタ変数を利用し、n になるまでは iterable で列挙される要素 el を無視するようにしました。
# ・index を n 未満である間だけインクリメントするようにしました。

def fib():
  a, b = 0, 1
  while True:
    yield b
    a, b = b, a + b

def drop(iterable, n):
  index = 0
  for el in iterable:
    if index < n:
      index += 1
      continue
    yield el

# ※これ以降は変更しないこと。
if __name__ == '__main__':
  import unittest

  class AnswerQ1Test(unittest.TestCase):
    def setUp(self):
      self.fib = fib()

    def test_fib(self):
      expected = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
      result = []
      for n in self.fib:
        result.append(n)
        if len(result) == 10: break
      self.assertEqual(result, expected)

    def test_drop(self):
      expected = [8, 13, 21, 34, 55]
      result = []
      for n in drop(self.fib, 5):
        result.append(n)
        if len(result) == 5: break
      self.assertEqual(result, expected)

    def test_100th_fib(self):
      expected = 354224848179261915075
      result = next(drop(self.fib, 99))
      self.assertEqual(result, expected)

  # run tests
  unittest.main()
