RosettaCodeData/Task/Fusc-sequence/Nim/fusc-sequence-2.nim

52 lines
1.0 KiB
Nim

import deques, strformat
iterator fusc(): int =
var q = [1].toDeque()
yield 0
yield 1
while true:
var val = q.popFirst()
q.addLast(val)
yield val
val += q[0]
q.addLast(val)
yield val
iterator longestFusc(): tuple[idx, val: int] =
var sofar = 0
var i = -1
for f in fusc():
inc i
if f >= sofar:
yield (i, f)
sofar = if sofar == 0: 10 else: 10 * sofar
#———————————————————————————————————————————————————————————————————————————————————————————————————
const
MaxFusc = 61
LongestCount = 7
echo &"First {MaxFusc}:"
var i = -1
for f in fusc():
inc i
stdout.write f
if i == MaxFusc:
echo ""
break
stdout.write ' '
echo "\nLength records:"
var count = 0
for (i, f) in longestFusc():
inc count
echo &"fusc({i}) = {f}"
if count == LongestCount:
break