Files
freeCodeCamp/curriculum/challenges/ukrainian/22-rosetta-code/rosetta-code-challenges/gray-code.md
2024-02-19 19:27:27 -06:00

123 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: 5a23c84252665b21eecc7e80
title: Код Грея
challengeType: 1
forumTopicId: 302276
dashedName: gray-code
---
# --description--
Код Грея — це форма бінарного програмування, де послідовні числа відрізняються лише одним бітом.
Таке програмування корисне для зменшення конфліктів апаратних даних зі значеннями, які швидко змінюються і/або підключаються до повільнішого обладнання як вхідні дані.
Воно також корисне для генерування вхідних даних для карт Карно в порядку зліва направо або зверху вниз.
# --instructions--
Створіть функцію, щоб зашифрувати число в код Грея та розшифрувати число з коду Грея. Функція повинна мати 2 параметри.
Перший параметр — булеве значення. Функція має зашифровувати, якщо true, та розшифровувати, якщо false. Другий параметр — число, яке потрібно зашифрувати/розшифрувати.
Відтворіть звичайні бінарні представлення, представлення коду Грея та розшифровані значення коду Грея для всіх 5-бітних бінарних чисел (від 0 до 31 включно, початкові нулі необов’язкові).
Існує багато можливих кодів Грея. Шифрування нижче називають «бінарним відображеним кодом Грея».
Шифрування (0 — найбільш значимий біт, b — бінарний, g — код Грея):
<pre>if b[i-1] = 1
g[i] = not b[i]
else
g[i] = b[i]
</pre>
Або:
<pre>g = b xor (b логічно зміщено праворуч 1 раз)
</pre>
Розшифрування (0 — найбільш значимий біт, b — бінарний, g — код Грея):
<pre>b[0] = g[0]<br>
для інших бітів:
b[i] = g[i] xor b[i-1]
</pre>
# --hints--
`gray` має бути функцією.
```js
assert(typeof gray == 'function');
```
`gray(true,177)` має повернути число.
```js
assert(typeof gray(true, 177) == 'number');
```
`gray(true,177)` має повернути `233`.
```js
assert.equal(gray(true, 177), 233);
```
`gray(true,425)` має повернути `381`.
```js
assert.equal(gray(true, 425), 381);
```
`gray(true,870)` має повернути `725`.
```js
assert.equal(gray(true, 870), 725);
```
`gray(false,233)` має повернути `177`.
```js
assert.equal(gray(false, 233), 177);
```
`gray(false,381)` має повернути `425`.
```js
assert.equal(gray(false, 381), 425);
```
`gray(false,725)` має повернути `870`.
```js
assert.equal(gray(false, 725), 870);
```
# --seed--
## --seed-contents--
```js
function gray(enc, number) {
}
```
# --solutions--
```js
function gray(enc, number){
if(enc){
return number ^ (number >> 1);
}else{
let n = number;
while (number >>= 1) {
n ^= number;
}
return n;
}
}
```