freeCodeCamp/guide/spanish/certifications/javascript-algorithms-and-d.../basic-javascript/counting-cards/index.md

134 lines
6.6 KiB
Markdown
Raw Normal View History

2018-10-12 19:37:13 +00:00
---
title: Counting Cards
localeTitle: Tarjetas de conteo
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 ": triangular_flag_on_post:") Recuerda usar **`Read-Search-Ask`** si te atascas. Tratar de emparejar el programa ![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 ": busts_in_silhouette:") y escribe tu propio código ![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":lápiz:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 ":bandera a cuadros:") Explicación del problema:
En el juego de casino **Blackjack** , un jugador puede obtener una ventaja sobre la casa al hacer un seguimiento del número relativo de cartas altas y bajas que quedan en el mazo. Esto se llama conteo de cartas.
Tener más cartas altas en el mazo favorece al jugador. A cada tarjeta se le asigna un valor de acuerdo con la siguiente tabla. Cuando el conteo es positivo, el jugador debe apostar alto. Cuando el conteo es cero o negativo, el jugador debe apostar bajo.
Valor | Tarjetas
\----- | : -------------------:
+1 | 2, 3, 4, 5, 6
0 | 7, 8, 9
\-1 | 10, 'J', 'Q', 'K', 'A'
Escribirás una función de conteo de cartas. Recibirá un parámetro de **tarjeta** e incrementará o disminuirá la variable de **conteo** global de acuerdo con el valor de la tarjeta (consulte la tabla). La función devolverá una cadena con el recuento actual y la cadena `Bet` si el recuento es positivo, o `Hold` si el recuento es cero o negativo. El conteo actual y la decisión del jugador ( `Bet` o `Hold` ) deben estar separados por un solo espacio.
* Cambie el código a continuación `// Only change code below this line` y hasta `// Only change code above this line`
* Asegúrese de que está editando el interior de la función `cc` .
* Use lo que ha aprendido para verificar el valor de cada parámetro de **tarjeta** que se pasó a la función.
* Mantenga una cuenta corriente de ese número.
* Si el conteo final es 1 o mayor, devuelve **\# Mantener** .
* Si el conteo final es 0 o menos, devuelve **\# Bet** .
**Ejemplo de salida:**
* \-3 espera
* 5 Apuesta
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugerencia: 1
Use una instrucción de `switch` (o `else if` ) para contar el valor de cada tarjeta.
> _intenta resolver el problema ahora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugerencia: 2
Suma / resta el valor de cada carta a la **cuenta** variable. Si la tarjeta vale 0, no hagas nada.
> _intenta resolver el problema ahora_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 ": speech_balloon:") Sugerencia: 3
Una vez que haya contado las tarjetas, use una instrucción `if` para verificar el valor del **conteo** . Además, asegúrese de que su `return` tenga un espacio entre el número y la cadena.
> _intenta resolver el problema ahora_
## ¡Alerta de spoiler!
![señal de advertencia](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**¡Solución por delante!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":principiante:") Solución de código básico:
```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
}
```
### Explicación del código:
* Compruebe el valor de cada tarjeta a través de una declaración de `switch` .
* La **cuenta** variable:
* Aumenta en 1 si la tarjeta es un 2, 3, 4, 5 o 6.
* Como 7, 8 y 9 no valen nada, ignoramos esas tarjetas en nuestra declaración de `switch` .
* Disminuye en 1 si la tarjeta es un 10, 'J', 'Q', 'K' o 'A'.
* Verifique el valor de **contar** y devuelva la respuesta apropiada.
**Ejecución de ejemplo**
* `cc(2);` carreras.
* La instrucción de `switch` golpea el `case 2` , salta hacia abajo y agrega 1 a la `count` variable.
* La instrucción `switch` `break` y `cc(3);` carreras.
* Este ciclo continúa hasta que se realiza la llamada final, `cc('A');` .
* Después de la instrucción `switch` , la instrucción `if` cuenta `count` , que ahora es 0.
* Esto luego cae a la instrucción `else` , que devolverá **0 Hold** .
**_Nota_** : Como se mencionó anteriormente, la instrucción `switch` también podría haber sido una instrucción `else if` .
## Solución 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
}
```
· Ejecutar código en [repl.it.](https://repl.it/@AdrianSkar/Basic-JS-Counting-cards)
### Explicación del código
· La función primero evalúa `if` la `card` condición es un valor mayor que `1` y menor que `7` , en cuyo caso la `count` se incrementa en uno. · Luego, si la tarjeta es `10` o más, se reduce la `count` en uno. · La variable `regex` es una [expresión regular que](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp) representa valores (letras) para las tarjetas más altas. · La sentencia `else` comprueba esos valores con el `|| (logical OR)` operador `|| (logical OR)` ; primero para `10` y luego para cualquier cadena que coincida con la expresión regular usando [String.match ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match) .
#### Recursos
* [Recuento de cartas en Wikipedia](https://en.wikipedia.org/wiki/Card_counting)
* [Desafío: seleccionar entre muchas opciones con instrucciones de cambio](http://www.freecodecamp.com/challenges/selecting-from-many-options-with-switch-statements)
* [Desafío: Encadenar Si En Else Declaraciones](http://www.freecodecamp.com/challenges/chaining-if-else-statements)
* [Desafío: Incrementar un número con Javascript](http://www.freecodecamp.com/challenges/increment-a-number-with-javascript)