134 lines
6.6 KiB
Markdown
134 lines
6.6 KiB
Markdown
|
---
|
||
|
title: Counting Cards
|
||
|
localeTitle: Contando Cartões
|
||
|
---
|
||
|
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post:") Lembre-se de usar **`Read-Search-Ask`** se você ficar preso. Tente emparelhar o programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") e escreva seu próprio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápis:")
|
||
|
|
||
|
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ": checkered_flag:") Explicação do Problema:
|
||
|
|
||
|
No jogo de cassino **Blackjack** , um jogador pode ganhar uma vantagem sobre a casa, mantendo o controle do número relativo de cartas altas e baixas remanescentes no baralho. Isso é chamado de contagem de cartas.
|
||
|
|
||
|
Ter mais cartas altas restantes no baralho favorece o jogador. Cada cartão recebe um valor de acordo com a tabela abaixo. Quando a contagem é positiva, o jogador deve apostar alto. Quando a contagem é zero ou negativa, o jogador deve apostar baixo.
|
||
|
|
||
|
Valor | Postais
|
||
|
\----- | : -------------------:
|
||
|
+1 | 2, 3, 4, 5, 6
|
||
|
0 | 7, 8, 9
|
||
|
\-1 | 10, 'J', 'Q', 'K', 'A'
|
||
|
|
||
|
Você vai escrever uma função de contagem de cartões. Ele receberá um parâmetro de **cartão** e incrementará ou decrementará a variável de **contagem** global de acordo com o valor do cartão (consulte a tabela). A função retornará uma string com a contagem atual e a string `Bet` se a contagem for positiva ou `Hold` se a contagem for zero ou negativa. A contagem atual e a decisão do jogador ( `Bet` ou `Hold` ) devem ser separadas por um único espaço.
|
||
|
|
||
|
* Altere o código abaixo `// Only change code below this line` e até `// Only change code above this line`
|
||
|
* Certifique-se de que você está editando o interior da função `cc` .
|
||
|
* Use o que você aprendeu para verificar o valor de cada parâmetro de **cartão** passado para a função.
|
||
|
* Mantenha uma contagem desse número.
|
||
|
* Se a contagem final for 1 ou maior, retorne **\# Hold** .
|
||
|
* Se a contagem final for 0 ou menos, retorne **\# Aposta** .
|
||
|
|
||
|
**Exemplo de Saída:**
|
||
|
|
||
|
* \-3 espera
|
||
|
* 5 Aposta
|
||
|
|
||
|
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugestão: 1
|
||
|
|
||
|
Use uma instrução `switch` (ou `else if` ) para contar o valor de cada cartão.
|
||
|
|
||
|
> _tente resolver o problema agora_
|
||
|
|
||
|
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 2
|
||
|
|
||
|
Adicionar / subtrair o valor de cada cartão para **contagem de** variáveis. Se a carta valer 0, não faça nada.
|
||
|
|
||
|
> _tente resolver o problema agora_
|
||
|
|
||
|
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Dica: 3
|
||
|
|
||
|
Depois de contar os cards, use uma instrução `if` para verificar o valor da **contagem** . Além disso, certifique-se de que seu `return` tenha um espaço entre o número e a string.
|
||
|
|
||
|
> _tente resolver o problema agora_
|
||
|
|
||
|
## Alerta de Spoiler!
|
||
|
|
||
|
![sinal de aviso](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
|
||
|
|
||
|
**Solução à frente!**
|
||
|
|
||
|
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solução básica de código:
|
||
|
|
||
|
```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
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### Explicação do código:
|
||
|
|
||
|
* Verifique o valor de cada cartão por meio de uma instrução `switch` .
|
||
|
* A **contagem** variável:
|
||
|
* Aumenta em 1 se o cartão for 2, 3, 4, 5 ou 6.
|
||
|
* Já que 7, 8 e 9 não valem nada, nós os ignoramos em nossa instrução `switch` .
|
||
|
* Diminui em 1 se o cartão for um 10, 'J', 'Q', 'K' ou 'A'.
|
||
|
* Verifique o valor da **contagem** e retorne a resposta apropriada.
|
||
|
|
||
|
**Exemplo de Execução**
|
||
|
|
||
|
* `cc(2);` corre.
|
||
|
* A instrução `switch` atinge o `case 2` , desce e adiciona 1 à `count` variáveis.
|
||
|
* A instrução `switch` , em seguida, atinge a `break` e `cc(3);` corre.
|
||
|
* Este ciclo continua até que a chamada final seja feita, `cc('A');` .
|
||
|
* Após o `switch` declaração, o `if` instrução verifica `count` , que é agora a 0.
|
||
|
* Isso então cai para a instrução `else` , que retornará **0 Hold** .
|
||
|
|
||
|
**_Nota_** : Como mencionado anteriormente, a instrução `switch` também poderia ter sido uma instrução `else if` .
|
||
|
|
||
|
## Solução de código adicional:
|
||
|
|
||
|
```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
|
||
|
}
|
||
|
```
|
||
|
|
||
|
· Executar código no [repl.it.](https://repl.it/@AdrianSkar/Basic-JS-Counting-cards)
|
||
|
|
||
|
### Explicação de código
|
||
|
|
||
|
· A função primeiro avalia `if` a `card` condição é um valor maior que `1` e menor que `7` , em cujo caso a `count` é incrementada em um. · Então, se a carta é `10` ou superior, diminui a `count` por um. · A variável `regex` é uma [expressão regular que](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) representa valores (letras) para as cartas mais altas. · A instrução `else` verifica esses valores com o `|| (logical OR)` operador `|| (logical OR)` ; primeiro para `10` e depois para qualquer string que corresponda à expressão regular usando [String.match ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) .
|
||
|
|
||
|
#### Recursos
|
||
|
|
||
|
* [Contagem de cartas na Wikipedia](https://en.wikipedia.org/wiki/Card_counting)
|
||
|
* [Desafio: Selecionando entre muitas opções com instruções de troca](http://www.freecodecamp.com/challenges/selecting-from-many-options-with-switch-statements)
|
||
|
* [Desafio: Encadeamento Se Mais Declarações](http://www.freecodecamp.com/challenges/chaining-if-else-statements)
|
||
|
* [Desafio: Incrementar um número com Javascript](http://www.freecodecamp.com/challenges/increment-a-number-with-javascript)
|