3.4 KiB
id, title, challengeType, forumTopicId, dashedName
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5a23c84252665b21eecc7e80 | Код Грея | 5 | 302276 | gray-code |
--description--
[ код Грея ](https://en.wikipedia.org/wiki/Gray code) - це форма бінарного кодування, де переходи між послідовними числами відрізняються лише на один біт.
Це корисне кодування для зменшення ризиків настання небезпеки для апаратних даних зі значеннями, що швидко змінюються та/або підключаються до повільнішого апаратного забезпечення як вхідних даних.
Це також корисно для генерації даних для [Karnaugh maps](https://en.wikipedia.org/wiki/Karnaugh map) у порядку зліва направо або зверху вниз.
--instructions--
Створіть функцію для кодування номера та декодування номера з коду Грея. Функція повинна мати 2 параметри.
Перший - це логічний тип даних. Функція має кодувати true і декодувати false. Другим параметром буде число, яке потрібно закодувати/декодувати.
Поккажіть нормальні бінарні значення, значення коду Грея, і декодування даних коду Грея для всіх 5-бінарних чисел (0-31 включно, провідні нулі не є необхідними).
Існує багато можливих кодів Грея. Наступні кодування називаються "двійковим відображувальним кодом Грея."
Кодування (MSB є бітом 0, b є бінарним, g - кодом Грея):
якщо b [i-1] = 1 g [i] = не b [i] інакше g [i] = b [i]
Або:
g = b xor (b логічно зміщено праворуч 1 раз)
Декодування (MSB є бітом 0, b є бінарним, g - кодом Грея):
b[0] = g[0]
для інших бітів: b[i] = g[i] xor b[i-1]
--hints--
gray
має бути функцією.
assert(typeof gray == 'function');
gray(true,177)
має повернути число.
assert(typeof gray(true, 177) == 'number');
gray(true,177)
має повернути 233
.
assert.equal(gray(true, 177), 233);
gray(true,425)
має повернути 381
.
assert.equal(gray(true, 425), 381);
gray(true,870)
має повернути 725
.
assert.equal(gray(true, 870), 725);
gray(false,233)
має повернути 177
.
assert.equal(gray(false, 233), 177);
gray(false,381)
має повернути 425
.
assert.equal(gray(false, 381), 425);
gray(false,725)
має повернути 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;
}
}