freeCodeCamp/curriculum/challenges/chinese/02-javascript-algorithms-an.../basic-javascript/counting-cards.md

3.7 KiB
Raw Blame History

id title challengeType videoUrl forumTopicId dashedName
565bbe00e9cc8ac0725390f4 21 点游戏 1 https://scrimba.com/c/c6KE7ty 16809 counting-cards

--description--

在赌场 21 点游戏中,玩家可以通过计算牌桌上已经发放的卡牌的高低值来让自己在游戏中保持优势。 这就叫 21 点算法

牌桌上的大值的卡牌更多,对玩家有利。 根据下面的表格,每张卡牌都被分配了一个值。 如果卡牌的值大于 0那么玩家应该追加赌注。 如果卡牌的值为 0 或负数,玩家应该追加少许赌注甚至不追加赌注。

计数卡牌
+12, 3, 4, 5, 6
07, 8, 9
-110, 'J', 'Q', 'K', 'A'

请写一个函数实现 21 点算法。 它根据参数 card 的值(见表格,可能是数字或者字符串)来递增或递减全局变量 count。 然后函数返回一个由当前 count计数Bet(当 count > 0 时)或 Hold(当 count <= 0 时) 拼接的字符串。 注意 count计数和玩家的决定BetHold)之间应该有空格。

示例输出:-3 Hold 或者 5 Bet

提示:
当卡牌为 7、8、9 时,不要把 count 值重置为 0。 不要返回一个数组。
输出结果中不要包含单引号或双引号。

--hints--

卡牌序列 2、3、4、5、6 应该返回 5 Bet

assert(
  (function () {
    count = 0;
    cc(2);
    cc(3);
    cc(4);
    cc(5);
    var out = cc(6);
    if (out === '5 Bet') {
      return true;
    }
    return false;
  })()
);

卡牌序列 7、8、9 应该返回 0 Hold

assert(
  (function () {
    count = 0;
    cc(7);
    cc(8);
    var out = cc(9);
    if (out === '0 Hold') {
      return true;
    }
    return false;
  })()
);

卡牌序列 10、J、Q、K、A 应该返回 -5 Hold

assert(
  (function () {
    count = 0;
    cc(10);
    cc('J');
    cc('Q');
    cc('K');
    var out = cc('A');
    if (out === '-5 Hold') {
      return true;
    }
    return false;
  })()
);

卡牌序列 3、7、Q、8、A 应该返回 -1 Hold

assert(
  (function () {
    count = 0;
    cc(3);
    cc(7);
    cc('Q');
    cc(8);
    var out = cc('A');
    if (out === '-1 Hold') {
      return true;
    }
    return false;
  })()
);

卡牌序列 2、J、9、2、7 应该返回 1 Bet

assert(
  (function () {
    count = 0;
    cc(2);
    cc('J');
    cc(9);
    cc(2);
    var out = cc(7);
    if (out === '1 Bet') {
      return true;
    }
    return false;
  })()
);

卡牌序列 2、2、10 应该返回 1 Bet

assert(
  (function () {
    count = 0;
    cc(2);
    cc(2);
    var out = cc(10);
    if (out === '1 Bet') {
      return true;
    }
    return false;
  })()
);

卡牌序列 3、2、A、10、K 应该返回 -1 Hold

assert(
  (function () {
    count = 0;
    cc(3);
    cc(2);
    cc('A');
    cc(10);
    var out = cc('K');
    if (out === '-1 Hold') {
      return true;
    }
    return false;
  })()
);

--seed--

--seed-contents--

var count = 0;

function cc(card) {
  // Only change code below this line


  return "Change Me";
  // Only change code above this line
}

cc(2); cc(3); cc(7); cc('K'); cc('A');

--solutions--

var count = 0;
function cc(card) {
  switch(card) {
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
      count++;
      break;
    case 10:
    case 'J':
    case 'Q':
    case 'K':
    case 'A':
      count--;
  }
  if(count > 0) {
    return count + " Bet";
  } else {
    return count + " Hold";
  }
}