toGray: function [n]-> xor n shr n 1 fromGray: function [n][ p: n while [n > 0][ n: shr n 1 p: xor p n ] return p ] loop 0..31 'num [ encoded: toGray num decoded: fromGray encoded print [ pad to :string num 2 ":" pad to :string .format:".b" num 5 "=>" pad to :string .format:".b" encoded 5 "=>" pad to :string .format:".b" decoded 5 ":" pad to :string decoded 2 ] ]