proc grayEncode(n): auto = n xor (n shr 1) proc grayDecode(n): auto = result = n var t = n while t > 0: t = t shr 1 result = result xor t