33 lines
634 B
Transact-SQL
33 lines
634 B
Transact-SQL
DECLARE @binary AS NVARCHAR(MAX) = '001010111'
|
|
DECLARE @gray AS NVARCHAR(MAX) = ''
|
|
|
|
--Encoder
|
|
SET @gray = LEFT(@binary, 1)
|
|
|
|
WHILE LEN(@binary) > 1
|
|
BEGIN
|
|
IF LEFT(@binary, 1) != SUBSTRING(@binary, 2, 1)
|
|
SET @gray = @gray + '1'
|
|
ELSE
|
|
SET @gray = @gray + '0'
|
|
|
|
SET @binary = RIGHT(@binary, LEN(@binary) - 1)
|
|
END
|
|
|
|
SELECT @gray
|
|
|
|
--Decoder
|
|
SET @binary = LEFT(@gray, 1)
|
|
|
|
WHILE LEN(@gray) > 1
|
|
BEGIN
|
|
IF RIGHT(@binary, 1) != SUBSTRING(@gray, 2, 1)
|
|
SET @binary = @binary + '1'
|
|
ELSE
|
|
SET @binary = @binary + '0'
|
|
|
|
SET @gray = RIGHT(@gray, LEN(@gray) - 1)
|
|
END
|
|
|
|
SELECT @binary
|