134 lines
9.0 KiB
Markdown
134 lines
9.0 KiB
Markdown
![]() |
---
|
|||
|
title: Counting Cards
|
|||
|
localeTitle: Счетные карточки
|
|||
|
---
|
|||
|
 Не забудьте использовать **`Read-Search-Ask`** если вы застряли. Попробуйте подключить программу  и напишите свой собственный код 
|
|||
|
|
|||
|
###  Проблема Объяснение:
|
|||
|
|
|||
|
В игре **Blackjack** в казино игрок может получить преимущество над домом, отслеживая относительное количество высоких и низких карт, оставшихся в колоде. Это называется подсчет карт.
|
|||
|
|
|||
|
Наличие более высоких карт, оставшихся в колоде, способствует игроку. Каждой карте присваивается значение в соответствии с приведенной ниже таблицей. Когда счет положителен, игрок должен делать ставки на высокий уровень. Когда счетчик равен нулю или отрицателен, игрок должен делать ставки на низком уровне.
|
|||
|
|
|||
|
Значение | Карты
|
|||
|
\----- | : -------------------:
|
|||
|
+1 | 2, 3, 4, 5, 6
|
|||
|
0 | 7, 8, 9
|
|||
|
\-1 | 10, 'J', 'Q', 'K', 'A'
|
|||
|
|
|||
|
Вы будете писать функцию подсчета карт. Он получит параметр **карты** и увеличит или уменьшит глобальную переменную **счета в** соответствии со значением карты (см. Таблицу). Затем функция вернет строку с текущим счетчиком и строкой `Bet` если счетчик положителен, или `Hold` если счетчик равен нулю или отрицателен. Текущий счетчик и решение игрока ( `Bet` или `Hold` ) должны быть разделены одним пробелом.
|
|||
|
|
|||
|
* Изменить код ниже `// Only change code below this line` и до `// Only change code above this line`
|
|||
|
* Убедитесь, что вы редактируете внутреннюю часть функции `cc` .
|
|||
|
* Используйте то, что вы изучили, чтобы проверить значение каждого параметра **карты,** переданного в функцию.
|
|||
|
* Сохраните подсчет этого числа.
|
|||
|
* Если конечный счет равен 1 или больше, верните **\# Удержание** .
|
|||
|
* Если итоговый счет равен 0 или меньше, верните **\# ставка** .
|
|||
|
|
|||
|
**Пример:**
|
|||
|
|
|||
|
* \-3 Удержание
|
|||
|
* 5 ставок
|
|||
|
|
|||
|
##  Подсказка: 1
|
|||
|
|
|||
|
Используйте оператор `switch` (или `else if` ), чтобы подсчитать значение каждой карты.
|
|||
|
|
|||
|
> _попытаться решить проблему сейчас_
|
|||
|
|
|||
|
##  Подсказка: 2
|
|||
|
|
|||
|
Добавьте / вычтите значение каждой карты для **подсчета** переменных. Если карта стоит 0, ничего не делайте.
|
|||
|
|
|||
|
> _попытаться решить проблему сейчас_
|
|||
|
|
|||
|
##  Подсказка: 3
|
|||
|
|
|||
|
После того, как вы подсчитали карты, используйте инструкцию `if` чтобы проверить значение **count** . Кроме того, убедитесь, что у вашего `return` есть пробел между номером и строкой.
|
|||
|
|
|||
|
> _попытаться решить проблему сейчас_
|
|||
|
|
|||
|
## Осторожно, спойлеры!
|
|||
|
|
|||
|

|
|||
|
|
|||
|
**Решение впереди!**
|
|||
|
|
|||
|
##  Решение базового кода:
|
|||
|
|
|||
|
```javascript
|
|||
|
function cc(card) {
|
|||
|
// Only change code below this line
|
|||
|
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--;
|
|||
|
break;
|
|||
|
}
|
|||
|
if (count > 0){
|
|||
|
return count + " Bet";
|
|||
|
} else {
|
|||
|
return count + " Hold";
|
|||
|
}
|
|||
|
// Only change code above this line
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### Код Объяснение:
|
|||
|
|
|||
|
* Проверьте значение каждой карточки с помощью оператора `switch` .
|
|||
|
* **Счетчик** переменных:
|
|||
|
* Увеличивает на 1, если карта равна 2, 3, 4, 5 или 6.
|
|||
|
* Поскольку 7, 8 и 9 ничего не стоят, мы игнорируем эти карты в инструкции `switch` .
|
|||
|
* Уменьшает на 1, если карта равна 10, 'J', 'Q', 'K' или 'A'.
|
|||
|
* Проверьте значение **счетчика** и верните соответствующий ответ.
|
|||
|
|
|||
|
**Пример Run**
|
|||
|
|
|||
|
* `cc(2);` пробеги.
|
|||
|
* Оператор `switch` обращается к `case 2` , спрыгивает вниз и добавляет 1 к `count` переменных.
|
|||
|
* Затем оператор `switch` попадает в `break` и `cc(3);` пробеги.
|
|||
|
* Этот цикл продолжается до окончательного вызова, `cc('A');` ,
|
|||
|
* После оператора `switch` оператор `if` проверяет `count` , который теперь равен 0.
|
|||
|
* Затем он опускается до инструкции `else` , которая вернет **0 Hold** .
|
|||
|
|
|||
|
**_Примечание_** . Как упоминалось ранее, оператор `switch` мог также быть инструкцией `else if` .
|
|||
|
|
|||
|
## Дополнительное решение для кода:
|
|||
|
|
|||
|
```javascript
|
|||
|
function cc(card) {
|
|||
|
// Only change code below this line
|
|||
|
var regex = /[JQKA]/;
|
|||
|
if (card > 1 && card < 7){count++;}
|
|||
|
else if (card === 10 || String(card).match(regex)){count--;}
|
|||
|
|
|||
|
if (count > 0) return count + " Bet";
|
|||
|
return count + " Hold";
|
|||
|
|
|||
|
// Only change code above this line
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
· Запустить код в [repl.it.](https://repl.it/@AdrianSkar/Basic-JS-Counting-cards)
|
|||
|
|
|||
|
### Обозначение кода
|
|||
|
|
|||
|
· Функция сначала оценивает, является `if` `card` условия значением больше `1` и ниже `7` , и в этом случае она увеличивает `count` на единицу. · Если карта равна `10` или выше, она уменьшает `count` на единицу. · Переменное `regex` является [регулярным выражением](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) , представляющее значение (буквы) для высших карт. · Оператор `else` проверяет эти значения с помощью `|| (logical OR)` оператор; сначала для `10` а затем для любой строки, которая соответствует регулярному выражению с помощью [String.match ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) .
|
|||
|
|
|||
|
#### Ресурсы
|
|||
|
|
|||
|
* [Счет в Википедии](https://en.wikipedia.org/wiki/Card_counting)
|
|||
|
* [Задача: выбор из множества опций с помощью операторов Switch](http://www.freecodecamp.com/challenges/selecting-from-many-options-with-switch-statements)
|
|||
|
* [Задача: цепочка в случае других утверждений](http://www.freecodecamp.com/challenges/chaining-if-else-statements)
|
|||
|
* [Задача: увеличить номер с помощью Javascript](http://www.freecodecamp.com/challenges/increment-a-number-with-javascript)
|