Cheat es un juego de cartas en el que intentas deshacerte de tu mano. Un giro se ve más o menos así:
- Determina qué rango de cartas tienes para jugar ese turno. En la mayoría de las variantes, este es un rango más alto que el turno anterior.
- Juega 1-4 cartas, boca abajo. Estos no tienen que coincidir con el rango válido. Si no lo hacen, se considera un truco . En este punto, cualquier jugador puede desafiarte .
- Si nadie te reta, el juego continúa con el siguiente jugador.
- Si alguien te reta y no hiciste trampa, tienen que tomar todas las cartas jugadas.
- Si alguien te reta y hiciste trampa, debes tomar todas las cartas jugadas.
La estrategia es principalmente una mezcla de faroles y conteo de cartas. Sin embargo, soy malo en matemáticas, así que voy a engañar a Cheat y traer un bot conmigo.
Entrada
La entrada será, en cualquier orden o formato que desee:
- La mano del jugador. Si sé que deben tener tarjetas (por ejemplo, las he visto recogerlas), se enumerarán en orden ascendente. Cualquier incógnita se enumerará después como
?
. Por ejemplo, si tienen seis cartas y sé que dos son 1 y uno es un 4, es una representación válida de la mano114???
. ? siempre se enumerarán después de las tarjetas conocidas.141???
y11???4
son entradas no válidas y su código no necesita manejarlas. - Las cartas que definitivamente conozco no son parte de su mano (las tengo, vi a alguien más recogerlas, etc.). La lista estará en orden ascendente de rango. La lista puede estar vacía.
- Las cartas que el jugador afirmó jugar. Si afirmaran jugar 3 7's, una posible entrada aquí sería
777
. Las cartas siempre serán del mismo rango.
El número de cartas jugadas siempre será 1-4 y los rangos siempre serán 0-9. Un rango nunca aparecerá más de cuatro veces en su mano + no en su mano.
Este es un ejemplo de entrada válida:
33577??
01555688
55
Este es un ejemplo de entrada no válida:
35377?? # Out of order
7779 # Five 7's in total
23 # Two separate ranks played
Salida
Un valor verdadero si definitivamente debemos desafiar. Un valor falso si no queremos desafiar.
Siempre desafiamos si sabemos que hicieron trampa. Sabemos que hicieron trampa si jugaban cartas que posiblemente no podrían tener:
12
3 # They don't have any 3's or ?'s
-------------
12?
33 # Fewer ?'s than played cards
-------------
123?
333
33 # Since we have three 3's they can't have two
La otra vez que desafiamos es si juegan sus últimas cartas. Incluso si el juego es legítimo, terminaría el juego, por lo que podríamos desafiarlo.
1
1 # They'd win, so challenge anyway
Más casos de prueba
Verdad (debería desafiar)
11445678?
22
-------------
????????
4
4444
-------------
12345678
9
Falsey (no debe desafiar)
1?
222
2
-------------
12?
22
22
-------------
?????
1111
Puntuación
El código más corto gana.
fuente
Respuestas:
Pyth, 22 bytes
Pruébalo en línea.
fuente
JavaScript (ES6), 93 bytes
Acepta tres cadenas de cartas (caracteres
0
-9
o?
); vuelve1
para el desafío, de lo0
contrario. Explicación:fuente
C # 6, 134 bytes
(Nota: en línea con el ejemplo de OP, esta respuesta devuelve falso incluso si el oponente tiene más de una carta y está jugando toda su mano. En términos de estrategia, esto debería ser verdadero).
Explicación:
a
: Mano del jugadorb
: Cartas que definitivamente sé ...c
: Cartas reclamadas para jugarSin golf:
fuente
a.Length==1
sera.Length==c.Length
. Parece implicar algo así en su nota, pero no sé a qué ejemplo de OP se refiere que hace posible que se jueguen más cartas que la cantidad de cartas que tiene el oponente en su mano.Java 8,
169135 bytesExplicación:
Pruébalo aquí.
NOTA:
(s+0).split("c",-1).length-1
da la cantidad de veces que el carácterc
ocurre en Strings
. Entonces, los comentarios en la explicación anterior son correctos, pero el código puede parecer diferente debido a eso. El(a+0).split(x+"|\\?",-1).length-1<C
campo de golf(a+0).split(x+"|\\?",-1).length<=C
y el4-(b+0).split(""+x,-1).length-1<C
campo de golf5-(b+0).split(""+x,-1).length<C
.fuente