gray_code¶
ソースコード¶
from titan_pylib.algorithm.gray_code import gray_code
展開済みコード¶
1# from titan_pylib.algorithm.gray_code import gray_code
2from typing import Iterator
3
4
5def gray_code(n) -> Iterator[int]:
6 """長さ n の bit 列に対し、0,1,...,(1<<n) を列挙する。
7 i 番目の返り値は、前と変化する位置を返す。
8 """
9 pre = 0
10 for i in range(1, 1 << n):
11 now = i ^ (i >> 1)
12 yield (pre ^ now).bit_length() - 1
13 pre = now