Gray code: Difference between revisions
Content added Content deleted
No edit summary |
|||
Line 3,853: | Line 3,853: | ||
31 : 11111 => 10000 => 10000 : 31 |
31 : 11111 => 10000 => 10000 : 31 |
||
</pre> |
</pre> |
||
=={{header|Picat}}== |
|||
<lang Picat>go => |
|||
foreach(I in 0..2**5-1) |
|||
G = gray_encode1(I), |
|||
E = gray_decode1(G), |
|||
printf("%2d %6w %2d %6w %6w %2d\n",I,I.to_binary_string, |
|||
G, G.to_binary_string, |
|||
E.to_binary_string, E) |
|||
end, |
|||
nl, |
|||
println("Checking 2**1300:"), |
|||
N2=2**1300, |
|||
G2=gray_encode1(N2), |
|||
E2=gray_decode1(G2), |
|||
% println(g2=G2), |
|||
% println(e2=E2), |
|||
println(check=cond(N2==E2,same,not_same)), |
|||
nl. |
|||
gray_encode1(N) = N ^ (N >> 1). |
|||
gray_decode1(N) = P => |
|||
P = N, |
|||
N := N >> 1, |
|||
while (N != 0) |
|||
P := P ^ N, |
|||
N := N >> 1 |
|||
end. </lang> |
|||
Output: |
|||
<pre> 0 0 0 0 0 0 |
|||
1 1 1 1 1 1 |
|||
2 10 3 11 10 2 |
|||
3 11 2 10 11 3 |
|||
4 100 6 110 100 4 |
|||
5 101 7 111 101 5 |
|||
6 110 5 101 110 6 |
|||
7 111 4 100 111 7 |
|||
8 1000 12 1100 1000 8 |
|||
9 1001 13 1101 1001 9 |
|||
10 1010 15 1111 1010 10 |
|||
11 1011 14 1110 1011 11 |
|||
12 1100 10 1010 1100 12 |
|||
13 1101 11 1011 1101 13 |
|||
14 1110 9 1001 1110 14 |
|||
15 1111 8 1000 1111 15 |
|||
16 10000 24 11000 10000 16 |
|||
17 10001 25 11001 10001 17 |
|||
18 10010 27 11011 10010 18 |
|||
19 10011 26 11010 10011 19 |
|||
20 10100 30 11110 10100 20 |
|||
21 10101 31 11111 10101 21 |
|||
22 10110 29 11101 10110 22 |
|||
23 10111 28 11100 10111 23 |
|||
24 11000 20 10100 11000 24 |
|||
25 11001 21 10101 11001 25 |
|||
26 11010 23 10111 11010 26 |
|||
27 11011 22 10110 11011 27 |
|||
28 11100 18 10010 11100 28 |
|||
29 11101 19 10011 11101 29 |
|||
30 11110 17 10001 11110 30 |
|||
31 11111 16 10000 11111 31 |
|||
Checking 2**1300 |
|||
check = same</pre> |
|||
=={{header|PicoLisp}}== |
=={{header|PicoLisp}}== |