Gray code
Karnaugh maps
Create functions to encode a number to and decode a number from Gray code.

Display the normal binary representations, Gray code representations, and decoded Gray code values for all 5-bit binary numbers (0-31 inclusive, leading 0's not necessary).

There are many possible Gray codes. The following encodes what is called "binary reflected Gray code."

Encoding (MSB is bit 0, b is binary, g is Gray code):

if b[i-1] = 1
   g[i] = not b[i]
else
   g[i] = b[i]
Or:

g = b xor (b logically right shifted 1 time)
Decoding (MSB is bit 0, b is binary, g is Gray code):

b[0] = g[0]

for other bits:
b[i] = g[i] xor b[i-1]
Reference
 Converting Between Gray and Binary Codes. It includes step-by-step animations.
  [ dup 1 >> ^ ]        is encodegray (   n --> n )
 
  [ dup
    [ dip [ 1 >> ]
      over ^ 
      over 0 = until ]
    nip ]               is decodegray (   n --> n )
 
  [ [] unrot times 
      [ 2 /mod char 0 + 
        rot join swap ]
    drop echo$ ]        is echobin    ( n n -->   )
 
 
  say "number  encoded  decoded" cr
  say "------  -------  -------" cr
  32 times 
    [ sp i^ 5 echobin
      say " -> "
      i^ encodegray dup 5 echobin 
      say " -> "
      decodegray 5 echobin cr ]