Blackjack (Interactivo) P79369


Warning: This problem has some issue.

The system has detected that this problem may have some issue, as a mistake in its statement or a wrong solution. It should be soon be repaired by its problem setter.

Solution status: C++ . (red languages have some issue).

It is not recommended to try to solve this problem until this warning disapears.

Statement
 

pdf   zip

html

ESTE PROBLEMA NO FUNCIONA AUN.

Haz un programa que juegue al Blackjack (un sencillo pero popular juego de cartas). ਐCuánto mejor lo haga, más puntos recibirás!


A diferencia de los restantes problemas de la OIE, donde tu programa debe calcular la salida correcta a una entrada dada, este problema es interactivo: la entrada que reciba tu programa cambiará en función de lo que responda.


Estas son las reglas del Blackjack:

  • Baraja francesa (de poker) con 52 cartas: 13 números (A, 2, …, 9, 10, J, Q, K) de 4 palos distintos.
  • El objetivo del juego es sumar tantos puntos como sea posible, sin superar nunca 21.
  • Los valores de las cartas son: su número; o 10 si la carta es J, Q o K; o 1 ó 11 si la carta es A.
  • Los puntos de un jugador es la suma de los valores de sus cartas, contabilizando los ases como 11 o 1 según convenga para tener la máxima puntuación posible, sin exceder 21. Por ejemplo: el valor de A, 9 es 20, el calor de A, A, 9 es 21, y el valor de A, A, A, 9 es 12.
  • Primero juegas tu: puedes ir pidiendo cartas (CARTA), una a una, hasta plantarte (STOP) o sumar 21 o más.
  • A continuación juega la banca, que siempre pide cartas hasta conseguir sumar 16 o más puntos.
  • Si tus cartas suman más de 21 (te pasas), gana la banca (sin importar los puntos que ésta tenga). Si la banca se pasa y tú no, ganas tú. Si ninguno de los dos se ha pasado, gana quien tenga más puntos, o se empata si ambos tienen la misma puntuación.

Además de estas reglas, jugaremos la partida de Blackjack con unas normas adicionales.

  • Se juega con 1 barajas de 52 cartas. Cuando una partida acaba, la siguiente empieza con las cartas que todavía no se han repartido de la misma baraja. Si a mitad de una partida se acaban las cartas, se sigue jugando con una baraja nueva.
  • Al empezar la partida la banca te reparte dos cartas (una descubierta, y una tapada) y se reparte dos cartas (una descubierta, y una tapada).
  • En ese instante puedes decidir la cantidad de tu apuesta: 1 o 2 fichas.
  • Después de apostar, se destapará tu carta tapada, y podrás decidir si seguir o no. Cuando acabe tu turno, se destapará la carta tapada de la banca, y ésta podrá decidir si seguir o no.

Conociendo estas normas tal vez puedas programar un jugador más bueno:

  • Cuenta las cartas que quedan sin repartir en la baraja para saber qué es más probable que ocurra.
  • En función de las cartas destapadas, decide si es conveniente apostar 1 o 2 fichas.

Tu jugador de Blackjack leerá la entrada para saber qué está pasando en la partida, y escribirá en la salida para decir cuánto quiere apostar, y cuándo quiere plantarse.

Entrada/Salida

Mira este ejemplo con 2 partidas. Las líneas con > indican entrada que tu programa debe leer, y las líneas con < son ejemplos de salida que tu programa podría haber escrito.


> PARTIDA
> JUGADOR 10
> JUGADOR TAPADA
> BANCA 5
> BANCA TAPADA
> APUESTA 1/2 ?
< APUESTA 1
> JUGADOR Q
> TOTAL 20 CARTA/STOP ?
< STOP
> BANCA 7
> BANCA A
> BANCA 4
> RESULTADO 1
> PARTIDA
> JUGADOR A
> JUGADOR TAPADA
> BANCA J
> BANCA TAPADA
> APUESTA 1/2 ?
< APUESTA 2
> JUGADOR 6
> TOTAL 17 CARTA/STOP ?
< CARTA
> JUGADOR 6
> TOTAL 13 CARTA/STOP ?
< CARTA
> JUGADOR J
> BANCA 8
> RESULTADO -2
> FINAL -1

Una carta se representa por su figura (A, 2, …, 10, J, Q o K). El texto JUGADOR X o BANCA X indica que tu jugador (o la banca) recibe la carta X.

Cada partida empieza con el texto PARTIDA. A continuación se reparten dos cartas a cada jugador, la segunda de las cuales está TAPADA, y se te pregunta la apuesta (APUESTA 1/2 ?), a lo que deberás responder APUESTA 1 o APUESTA 2. Luego se te reparten cartas. Después de cada carta, y siempre que tu puntuación no llegue a 21, se te pregunta TOTAL X CARTA/STOP?, donde X es el valor de tus cartas (si hay ases, el máximo valor de tus cartas sin superar 21). A cada pregunta, deberás respondar CARTA o STOP. No te olvides de escribir un salto de línea.

Una vez acabe tu turno, juega la banca, que recibirá cartas hasta igualar o superar 16. La última línea de la partida es RESULTADO X, donde X será, en función de la apuesta, −2 o −1 si pierdes, 1 o 2 si ganas, y 0 si empatas. La última línea de toda la entrada contendrá FINAL X, donde X es la puntuación total de tu programa. Cuando esto ocurra, tu programa deberá finalizar.

Para poder probar que tu programa funciona correctamente, puedes usar los archivos blackjack.exe, conn.py y entrada.txt que tienes a tu disposición. Escribiendo


python conn.py ./programa.exe entrada.txt


donde ./programa.exe es el nombre de tu ejecutable, tu programa se ejecutará tantas veces como indique la primera línea del archivo de texto entrada.txt. También puedes jugar manualmente tú contra la banca, para estudiar como es la entrada y salida, escribiendo


./blackjack.exe entrada.txt

Puntuación

Tu programa jugará exactamente 10000 partidas contra la banca. La puntuación de tu programa dependerá de las apuestas que gane:

  • 10-30 Puntos. Acabar con entre −20000 y −1000 fichas.
  • 30-70 Puntos. Acabar con entre −1000 y 0 fichas.
  • 70-100 Puntos. Acabar con entre 0 y 1000 fichas.

En caso de estar entre dos puntuaciones, tu programa recibirá el valor intermedio que corresponda, redondeando hacia abajo. Por ejemplo, un programa que acabe con FINAL -500 recibirá 50 puntos.

Information
Author
Omer Giménez
Language
Spanish
Official solutions
C++
User solutions