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

2.3 KiB
Raw Blame History

id, title, challengeType, videoUrl, dashedName
id title challengeType videoUrl dashedName
5a23c84252665b21eecc7e80 格雷码 5 gray-code

--description--

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