i had to write a text file with a 7-bit gray code for work. rather than spending 10 minutes figuring out the gray code by hand, I decided to do spend a half hour hacking something up to do it for me.

## 1. what’s a gray code?

gray codes, aka reflected binary codes, are a sequence of binary numbers that, rather progressing in order, progress by with each value differing by one bit. gray codes are useful for error detection/correction in switching, and can be found in the wild when using karnaugh maps, genetic algorithms, and real-time error detection/correction in hardware.

## 2. the trick to gray codes:

intuitively, gray codes seem easy: duh, just change one bit at a time. constructing a full cycle of gray codes that starts at 0^n and progresses until it loops back to 0^n is more challenging. extending that construction for n>5 is an absurd human task, without knowing the trick:

• construct the n = 1 list `(0, 1)`
• flip and append the list `(0, 1, 1, 0)`
• construct the n = 2 list `(0, 0, 1, 1)`
• combine the n = 2 list and n = 1 list `(00, 01, 11, 10)`
• flip and append the list `(00, 01, 11, 10, 10, 11, 01, 00)`
• construct the n = 3 list `(0, 0, 0, 0, 1, 1, 1, 1)`
• combine the n = 3 list and n = 2 + 1 list `(000, 001, 011, 010...)`
• continue until n

this is super easy to do in paper. this is less easy to figure out in code. python makes it stupid easy.

## 3. the code

by no means the most efficient, but quick and dirty and got the job done.

``````import sys

greylen = int(sys.argv)
var_array = []

for num in range(greylen):
temp_zer = []
temp_one = []
for ind in range(pow(2,num)):
temp_zer.append(0)
temp_one.append(1)
var_array.append(temp_zer + temp_one)

for num in range(int(greylen)):
cur_arr = var_array[len(var_array)-num-1]
while len(cur_arr)
``````