RosettaCodeData/Task/Gray-code/SETL/gray-code.setl

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;