35 lines
606 B
Elixir
35 lines
606 B
Elixir
function gray_encode(integer n)
|
|
return xor_bits(n,floor(n/2))
|
|
end function
|
|
|
|
function gray_decode(integer n)
|
|
integer g
|
|
g = 0
|
|
while n > 0 do
|
|
g = xor_bits(g,n)
|
|
n = floor(n/2)
|
|
end while
|
|
return g
|
|
end function
|
|
|
|
function dcb(integer n)
|
|
atom d,m
|
|
d = 0
|
|
m = 1
|
|
while n do
|
|
d += remainder(n,2)*m
|
|
n = floor(n/2)
|
|
m *= 10
|
|
end while
|
|
return d
|
|
end function
|
|
|
|
integer j
|
|
for i = #0 to #1F do
|
|
printf(1,"%05d => ",dcb(i))
|
|
j = gray_encode(i)
|
|
printf(1,"%05d => ",dcb(j))
|
|
j = gray_decode(j)
|
|
printf(1,"%05d\n",dcb(j))
|
|
end for
|