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.
 
function BinaryToGray param1
	set theResult to ""
	repeat for each character in param1
		if the counter is equal to 1
			put it after theResult
		else
			if it is equal to previousCharacter
				put "0" after theResult
			else
				put "1" after theResult
			end if
		end if
		set previousCharacter to it
	end repeat
	return theResult
end BinaryToGray
 
function GrayToBinary param1
	set theResult to param1
	repeat for each character in param1
		if the counter is equal to 1
			next repeat
		end if
		set currentChar to it
		set lastCharInd to the counter - 1
		repeat for lastCharInd down to 1
			if currentChar is equal to character it of param1
				set currentChar to "0"
			else
				set currentChar to "1"
			end if
		end repeat
		set character the counter of theResult to currentChar
	end repeat
 
	return theResult
end GrayToBinary
 