30 lines
694 B
Plaintext
30 lines
694 B
Plaintext
program gray_code;
|
|
loop for n in [0..31] do
|
|
print(
|
|
lpad(str n, 2) + ": " +
|
|
lpad(bits n, 5) + " => " +
|
|
lpad(bits(g := gray_encode(n)), 5) + " => " +
|
|
lpad(bits(d := gray_decode(g)), 5) + ": " +
|
|
lpad(str d, 2)
|
|
);
|
|
end loop;
|
|
|
|
proc gray_encode(n);
|
|
return n bit_xor (n div 2);
|
|
end proc;
|
|
|
|
proc gray_decode(n);
|
|
loop
|
|
init r := 0;
|
|
step n div:= 2;
|
|
until n=0 do r bit_xor:= n;
|
|
end loop;
|
|
return r;
|
|
end proc;
|
|
|
|
op bits(n);
|
|
b := '' +/ [[str (n mod 2), n div:=2](1) : until n=0];
|
|
return reverse(b);
|
|
end op;
|
|
end program;
|