-
Notifications
You must be signed in to change notification settings - Fork 4.7k
Expand file tree
/
Copy pathgray_code.py
More file actions
32 lines (23 loc) · 804 Bytes
/
gray_code.py
File metadata and controls
32 lines (23 loc) · 804 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
"""Gray code — generate n-bit Gray code sequences.
A Gray code is an ordering of binary numbers such that successive values
differ in exactly one bit. Used in error correction and rotary encoders.
Inspired by PR #932 (Simranstha045).
"""
from __future__ import annotations
def gray_code(n: int) -> list[int]:
"""Return the n-bit Gray code sequence as a list of integers.
Uses the reflection (mirror) construction:
gray(i) = i ^ (i >> 1)
>>> gray_code(2)
[0, 1, 3, 2]
>>> gray_code(3)
[0, 1, 3, 2, 6, 7, 5, 4]
"""
return [i ^ (i >> 1) for i in range(1 << n)]
def gray_to_binary(gray: int) -> int:
"""Convert a Gray-coded integer back to standard binary."""
mask = gray >> 1
while mask:
gray ^= mask
mask >>= 1
return gray