Oliver Eyton-Williams ee1e8abd87
feat(curriculum): restore seed + solution to Chinese (#40683)
* feat(tools): add seed/solution restore script

* chore(curriculum): remove empty sections' markers

* chore(curriculum): add seed + solution to Chinese

* chore: remove old formatter

* fix: update getChallenges

parse translated challenges separately, without reference to the source

* chore(curriculum): add dashedName to English

* chore(curriculum): add dashedName to Chinese

* refactor: remove unused challenge property 'name'

* fix: relax dashedName requirement

* fix: stray tag

Remove stray `pre` tag from challenge file.

Signed-off-by: nhcarrigan <nhcarrigan@gmail.com>

Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2021-01-12 19:31:00 -07:00

93 lines
2.3 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: 5
videoUrl: ''
dashedName: gray-code
---
# --description--
[格雷码](<https://en.wikipedia.org/wiki/Gray code>)是二进制编码的一种形式,其中连续数字之间的转换仅相差一位。这是一种有用的编码,用于减少硬件数据危险,其值快速变化和/或连接到较慢的硬件作为输入。从左到右或从上到下依次为[卡诺图](<https://en.wikipedia.org/wiki/Karnaugh map>)生成输入也很有用。创建一个函数来编码数字并解码格雷码中的数字。该函数应该有2个参数。第一个是布尔值。该函数应编码为true解码为false。第二个参数是要编码/解码的数字。显示所有5位二进制数的正常二进制表示格雷码表示和解码格雷码值0-31包括0不需要前导0。有许多可能的格雷码。以下编码所谓的“二进制反射格雷码”。
编码MSB为0位b为二进制g为格雷码 <code><br>if b[i-1] = 1<br><span style='padding-left:1em'>g[i] = not b[i]</span><br>else<br><span style='padding-left:1em'>g[i] = b[i]</span><br></code>要么:
`g = b xor (b logically right shifted 1 time)`
解码MSB为0位b为二进制g为格雷码
<code>b[0] = g[0]<br>for other bits:<br>b[i] = g[i] xor b[i-1]<br></code>
# --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;
}
}
```