September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
46
Task/Gray-code/Bc/gray-code.bc
Normal file
46
Task/Gray-code/Bc/gray-code.bc
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
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
|
||||
12
Task/Gray-code/Crystal/gray-code-1.crystal
Normal file
12
Task/Gray-code/Crystal/gray-code-1.crystal
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
def gray_encode(bin)
|
||||
bin ^ (bin >> 1)
|
||||
end
|
||||
|
||||
def gray_decode(gray)
|
||||
bin = gray
|
||||
while gray > 0
|
||||
gray >>= 1
|
||||
bin ^= gray
|
||||
end
|
||||
bin
|
||||
end
|
||||
5
Task/Gray-code/Crystal/gray-code-2.crystal
Normal file
5
Task/Gray-code/Crystal/gray-code-2.crystal
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
(0..31).each do |n|
|
||||
gr = gray_encode n
|
||||
bin = gray_decode gr
|
||||
printf "%2d : %05b => %05b => %05b : %2d\n", n, n, gr, bin, bin
|
||||
end
|
||||
|
|
@ -17,7 +17,7 @@ T[][] grayDict(int N, T)() pure nothrow {
|
|||
T[][] dict = [gray!(N, T)(), [0]];
|
||||
// Append inversed gray encoding mapping.
|
||||
foreach (immutable i; 1 .. dict[0].length)
|
||||
dict[1] ~= countUntil(dict[0], i);
|
||||
dict[1] ~= cast(T)countUntil(dict[0], i);
|
||||
return dict;
|
||||
}
|
||||
|
||||
|
|
|
|||
41
Task/Gray-code/FreeBASIC/gray-code.freebasic
Normal file
41
Task/Gray-code/FreeBASIC/gray-code.freebasic
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
' version 18-01-2017
|
||||
' compile with: fbc -s console
|
||||
|
||||
Function gray2bin(g As UInteger) As UInteger
|
||||
|
||||
Dim As UInteger b = g
|
||||
|
||||
While g
|
||||
g Shr= 1
|
||||
b Xor= g
|
||||
Wend
|
||||
|
||||
Return b
|
||||
|
||||
End Function
|
||||
|
||||
Function bin2gray(b As UInteger) As UInteger
|
||||
|
||||
Return b Xor (b Shr 1)
|
||||
|
||||
End Function
|
||||
|
||||
' ------=< MAIN >=------
|
||||
|
||||
Dim As UInteger i
|
||||
|
||||
Print " i binary gray gra2bin"
|
||||
Print String(32,"=")
|
||||
|
||||
For i = 0 To 31
|
||||
Print Using "## --> "; i;
|
||||
print Bin(i,5); " --> ";
|
||||
Print Bin(bin2gray(i),5); " --> ";
|
||||
Print Bin(gray2bin(bin2gray(i)),5)
|
||||
Next
|
||||
|
||||
' empty keyboard buffer
|
||||
While Inkey <> "" : Wend
|
||||
Print : Print "hit any key to end program"
|
||||
Sleep
|
||||
End
|
||||
24
Task/Gray-code/Kotlin/gray-code.kotlin
Normal file
24
Task/Gray-code/Kotlin/gray-code.kotlin
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
// version 1.0.6
|
||||
|
||||
object Gray {
|
||||
fun encode(n: Int) = n xor (n shr 1)
|
||||
|
||||
fun decode(n: Int): Int {
|
||||
var p = n
|
||||
var nn = n
|
||||
while (nn != 0) {
|
||||
nn = nn shr 1
|
||||
p = p xor nn
|
||||
}
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
println("Number\tBinary\tGray\tDecoded")
|
||||
for (i in 0..31) {
|
||||
print("$i\t${Integer.toBinaryString(i)}\t")
|
||||
val g = Gray.encode(i)
|
||||
println("${Integer.toBinaryString(g)}\t${Gray.decode(g)}")
|
||||
}
|
||||
}
|
||||
|
|
@ -1,28 +0,0 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @author Elad Yosifon
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param int $binary
|
||||
* @return int
|
||||
*/
|
||||
function gray_encode($binary){
|
||||
return $binary ^ ($binary >> 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $gray
|
||||
* @return int
|
||||
*/
|
||||
function gray_decode($gray){
|
||||
$binary = $gray;
|
||||
while($gray >>= 1) $binary ^= $gray;
|
||||
return $binary;
|
||||
}
|
||||
|
||||
for($i=0;$i<32;$i++){
|
||||
$gray_encoded = gray_encode($i);
|
||||
printf("%2d : %05b => %05b => %05b : %2d \n",$i, $i, $gray_encoded, $gray_encoded, gray_decode($gray_encoded));
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
(stringrange, stringsize):
|
||||
Gray_code: procedure options (main); /* 15 November 2013 */
|
||||
declare (bin(0:31), g(0:31), b2(0:31)) bit (5);
|
||||
declare (c, carry) bit (1);
|
||||
declare (i, j) fixed binary (7);
|
||||
|
||||
bin(0) = '00000'b;
|
||||
do i = 0 to 31;
|
||||
if i > 0 then
|
||||
do;
|
||||
carry = '1'b;
|
||||
bin(i) = bin(i-1);
|
||||
do j = 5 to 1 by -1;
|
||||
c = substr(bin(i), j, 1) & carry;
|
||||
substr(bin(i), j, 1) = substr(bin(i), j, 1) ^ carry;
|
||||
carry = c;
|
||||
end;
|
||||
end;
|
||||
g(i) = bin(i) ^ '0'b || substr(bin(i), 1, 4);
|
||||
end;
|
||||
do i = 0 to 31;
|
||||
substr(b2(i), 1, 1) = substr(g(i), 1, 1);
|
||||
do j = 2 to 5;
|
||||
substr(b2(i), j, 1) = substr(g(i), j, 1) ^ substr(bin(i), j-1, 1);
|
||||
end;
|
||||
end;
|
||||
|
||||
do i = 0 to 31;
|
||||
put skip edit (i, bin(i), g(i), b2(i)) (f(2), 3(x(1), b));
|
||||
end;
|
||||
end Gray_code;
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
func bin2gray(n) {
|
||||
n ^ (n >> 1);
|
||||
n ^ (n >> 1)
|
||||
}
|
||||
|
||||
func gray2bin(num) {
|
||||
var bin = num;
|
||||
while (num >>= 1) { bin ^= num };
|
||||
return bin;
|
||||
var bin = num
|
||||
while (num >>= 1) { bin ^= num }
|
||||
return bin
|
||||
}
|
||||
|
||||
0..31 -> each { |i|
|
||||
var gr = bin2gray(i);
|
||||
printf("%d\t%b\t%b\t%b\n", i, i, gr, gray2bin(gr));
|
||||
}
|
||||
{ |i|
|
||||
var gr = bin2gray(i)
|
||||
printf("%d\t%b\t%b\t%b\n", i, i, gr, gray2bin(gr))
|
||||
} << ^32
|
||||
|
|
|
|||
2
Task/Gray-code/Zkl/gray-code-1.zkl
Normal file
2
Task/Gray-code/Zkl/gray-code-1.zkl
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
fcn grayEncode(n){ n.bitXor(n.shiftRight(1)) }
|
||||
fcn grayDecode(g){ b:=g; while(g/=2){ b=b.bitXor(g) } b }
|
||||
4
Task/Gray-code/Zkl/gray-code-2.zkl
Normal file
4
Task/Gray-code/Zkl/gray-code-2.zkl
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
foreach n in ([0..31]){
|
||||
g:=grayEncode(n); b:=grayDecode(g);
|
||||
println("%2d(%05.2B) --> %2d(%05.2B) --> %2d(%05.2B)".fmt(n,n,g,g,b,b));
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue