47 lines
769 B
Plaintext
47 lines
769 B
Plaintext
scale = 0 /* to use integer division */
|
|
|
|
/* encode Gray code */
|
|
define e(i) {
|
|
auto h, r
|
|
|
|
if (i <= 0) return 0
|
|
h = i / 2
|
|
r = e(h) * 2 /* recurse */
|
|
if (h % 2 != i % 2) r += 1 /* xor low bits of h, i */
|
|
return r
|
|
}
|
|
|
|
/* decode Gray code */
|
|
define d(i) {
|
|
auto h, r
|
|
|
|
if (i <= 0) return 0
|
|
h = d(i / 2) /* recurse */
|
|
r = h * 2
|
|
if (h % 2 != i % 2) r += 1 /* xor low bits of h, i */
|
|
return r
|
|
}
|
|
|
|
|
|
/* print i as 5 binary digits */
|
|
define p(i) {
|
|
auto d, d[]
|
|
|
|
for (d = 0; d <= 4; d++) {
|
|
d[d] = i % 2
|
|
i /= 2
|
|
}
|
|
for (d = 4; d >= 0; d--) {
|
|
if(d[d] == 0) "0"
|
|
if(d[d] == 1) "1"
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < 32; i++) {
|
|
/* original */ t = p(i); " => "
|
|
/* encoded */ e = e(i); t = p(e); " => "
|
|
/* decoded */ d = d(e); t = p(d); "
|
|
"
|
|
}
|
|
quit
|