2.6 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5a23c84252665b21eecc7e80 | Código de Gray | 5 | 302276 | gray-code |
--description--
O Código de Gray é uma forma de codificação binária, onde as transições entre números consecutivos diferem apenas em um bit.
Esta é uma codificação útil para reduzir riscos de dados de hardware com valores que se alteram rapidamente e/ou estejam associados ao hardware mais lento como entradas.
Ele também é útil para gerar entradas para os mapas de Karnaugh, em ordem, da esquerda para a direita e de cima para baixo.
--instructions--
Crie uma função para codificar um número e decodifique um número a partir do código de Gray. A função deve receber dois parâmetros.
O primeiro deve ser um booleano. A função deve codificar para true e decodificar para false. O segundo parâmetro seria o número a ser codificado/decodificado.
Exibir as representações binárias normais, as representações do código de Gray e valores do código de Gray decodificados para todos os números binários de 5 bits (0-31 inclusive, mas os 0s iniciais não são necessários).
Existem muitos códigos de Gray possíveis. A seguir, temos um que codifica o que é chamado de "código de Gray refletido em binário."
Codificação (o MSB - bit mais significativo - é o bit 0, b é binário e g é o código de Gray):
if b[i-1] = 1 g[i] = not b[i] else g[i] = b[i]
Ou:
g = b xor (b deslocado logicamente para a direita 1 vez)
Decodificação (o MSB - bit mais significativo - é o bit 0, b é binário e g é o código de Gray):
b[0] = g[0]
para outros bits: b[i] = g[i] xor b[i-1]
--hints--
gray
deve ser uma função.
assert(typeof gray == 'function');
gray(true,177)
deve retornar um número.
assert(typeof gray(true, 177) == 'number');
gray(true,177)
deve retornar 233
.
assert.equal(gray(true, 177), 233);
gray(true,425)
deve retornar 381
.
assert.equal(gray(true, 425), 381);
gray(true,870)
deve retornar 725
.
assert.equal(gray(true, 870), 725);
gray(false,233)
deve retornar 177
.
assert.equal(gray(false, 233), 177);
gray(false,381)
deve retornar 425
.
assert.equal(gray(false, 381), 425);
gray(false,725)
deve retornar 870
.
assert.equal(gray(false, 725), 870);
--seed--
--seed-contents--
function gray(enc, number) {
}
--solutions--
function gray(enc, number){
if(enc){
return number ^ (number >> 1);
}else{
let n = number;
while (number >>= 1) {
n ^= number;
}
return n;
}
}