続・格子点の数え上げ

id:ocs:20050622の続き。
とりあえず全部計算してから、距離の短い順に並び替えるスクリプトを書いてみた。r は適当な半径。

r = 5
lattices = [(x**2 + y**2, x, y) for x in range(1, r) \
        for y in range(1, r) if x**2 + y**2 < r**2]
lattices.sort()
for x in lattices:
    print x

シンプルはシンプル。r = 1000 で実行しても 2 分程度だったので、まぁ割と速いかな?
Python のリストは良くできてるなぁ。あとで同じことを Ruby あたりにやらせてみるか。