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) |