Project Euler 341

http://projecteuler.net/index.php?section=problems&id=341

ややこしそうだったからずっと放置していたが、組んでみたら簡単だった。
Gを素直に計算するとき、リストか何かが必要かと思ったが、こう書くとその必要はない。

from itertools import *

def G():
    yield 1
    for k, n in enumerate(G(), 1):
        for m in xrange(n - 1):
            yield k
        yield k + 1

print list(islice(G(), 20))

Gを2回計算しているけれど、中で使っているGはほとんど生成しないので影響ない。