差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
programming_algorithm:grid [2020/08/06] ikatakosprogramming_algorithm:grid [2020/08/06] – [1次元化] ikatakos
行 144: 行 144:
 「上下左右への探索」で紹介したのと同様に、1次元で配列を持ちたい場合。 「上下左右への探索」で紹介したのと同様に、1次元で配列を持ちたい場合。
  
-ただし、外壁作っていない(外壁を含めて全体をイテレートするとする。+ただし、外壁作っている場合でも、外壁を含めて全体をイテレートするとする。
  
-統一的に書くのは難しいので、↘方向と↙方向、それぞれ2回に分けて書くとする+統一的に書くのは難しいので、↘方向と↙方向、それぞれ2回に分けて書く。
  
 <sxh python> <sxh python>
行 212: 行 212:
 # [18] # [18]
 </sxh> </sxh>
 +
 +
 +もうちょっとスッキリさせたやつ。min,maxを排除した代わりに割り算を使っているので、速度的には遅いかも。
 +
 +<sxh python>
 +h = 4
 +w = 6
 +grid = list(range(h * w))
 +
 +
 +def iter_ld(i):
 +    while True:
 +        yield i
 +        d, m = divmod(i, w)
 +        if d == h - 1 or m == 0:
 +            break
 +        i += w - 1
 +
 +
 +def iter_rd(i):
 +    while True:
 +        yield i
 +        d, m = divmod(i, w)
 +        if d == h - 1 or m == w - 1:
 +            break
 +        i += w + 1
 +
 +
 +# ↙方向、最上段開始
 +for k in range(w):
 +    for i in iter_ld(k):
 +        pass
 +
 +# ↙方向、最右列開始
 +for k in range(1, h):
 +    for i in iter_ld(w - 1 + k * w):
 +        pass
 +
 +# ↘方向、最上段開始
 +for k in range(-w + 1, 1):
 +    for i in iter_rd(-k):
 +        pass
 +
 +# ↘方向、最左列開始
 +for k in range(1, h):
 +    for i in iter_rd(k * w):
 +        pass
 +</sxh>
 +
  
programming_algorithm/grid.txt · 最終更新: 2020/08/12 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0