fn xorSmall(left: u32, right: u32) -> u32 { var a: u32 = left var b: u32 = right var bit: u32 = 1 var out: u32 = 0 while a > 0 || b > 0 { if a % 2 != b % 2 { out = out + bit } a = a / 2 b = b / 2 bit = bit * 2 } return out } fn gray(n: u32) -> u32 { return xorSmall(n, n / 2) } pub fn main(world: World) -> Void raises { var ok: Bool = true let expected: [8]u32 = [0, 1, 3, 2, 6, 7, 5, 4] var i: usize = 0 while i < 8 { if gray(i as u32) != expected[i] { ok = false } i = i + 1 } if ok { check world.out.write("gray code ok\n") } }