tkeep_state_between_yield.nim 664 B

12345678910111213141516171819202122232425262728293031323334353637
  1. discard """
  2. output: '''@[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 18, 20, 21, 24, 27, 30, 36, 40, 42]
  3. 1002'''
  4. """
  5. import strutils
  6. proc slice[T](iter: iterator(): T {.closure.}, sl: auto): seq[T] =
  7. var res: seq[int64] = @[]
  8. var i = 0
  9. for n in iter():
  10. if i > sl.b:
  11. break
  12. if i >= sl.a:
  13. res.add(n)
  14. inc i
  15. res
  16. iterator harshad(): int64 {.closure.} =
  17. for n in 1 .. < int64.high:
  18. var sum = 0
  19. for ch in string($n):
  20. sum += parseInt("" & ch)
  21. if n mod sum == 0:
  22. yield n
  23. echo harshad.slice 0 .. <20
  24. for n in harshad():
  25. if n > 1000:
  26. echo n
  27. break
  28. # bug #3499 last snippet fixed
  29. # bug 705 last snippet fixed