La triche est un jeu de cartes où vous essayez de vous débarrasser de votre main. Un virage ressemble à peu près à ceci:
- Déterminez quel rang de carte vous devez jouer ce tour-ci. Dans la plupart des variantes, c'est un rang de plus que le tour précédent.
- Jouez 1 à 4 cartes, face cachée. Ceux-ci n'ont pas à correspondre au rang valide. S'ils ne le font pas, c'est considéré comme une triche . À ce stade, n'importe quel joueur peut vous défier .
- Si personne ne vous défie, le jeu continue jusqu'au joueur suivant.
- Si quelqu'un vous met au défi et que vous n'avez pas triché, il doit prendre toutes les cartes jouées.
- Si quelqu'un vous défie et que vous avez triché, vous devez prendre toutes les cartes jouées.
La stratégie est principalement un mélange de bluff et de comptage de cartes. Je suis mauvais en mathématiques, cependant, je vais donc tricher à Cheat et apporter un bot avec moi.
Contribution
L'entrée sera, dans n'importe quel ordre ou format que vous souhaitez:
- La main du joueur. Si je sais qu'ils doivent avoir des cartes (par exemple, je les ai vues les récupérer), celles-ci seront répertoriées par ordre croissant. Toutes les inconnues seront ensuite répertoriées comme
?
. Par exemple, s'ils ont six cartes et je sais que deux sont des 1 et un est un 4, une représentation valide de la main est114???
. Les? seront toujours répertoriés après les cartes connues.141???
et11???4
sont à la fois des entrées non valides et votre code n'a pas besoin de les gérer. - Les cartes que je connais définitivement ne font pas partie de leur main (je les ai, j'ai vu quelqu'un d'autre les ramasser, etc.). La liste sera par ordre croissant de rang. La liste est peut-être vide.
- Les cartes que le joueur prétendait jouer. S'ils prétendaient jouer 3 7, une entrée possible ici serait
777
. Les cartes auront toujours le même rang.
Le nombre de cartes jouées sera toujours de 1 à 4 et les rangs seront toujours de 0 à 9. Un rang n'apparaîtra jamais plus de quatre fois dans sa main + pas dans sa main.
Ceci est un exemple d'entrée valide:
33577??
01555688
55
Ceci est un exemple d'entrée non valide:
35377?? # Out of order
7779 # Five 7's in total
23 # Two separate ranks played
Production
Une valeur honnête si nous devons définitivement contester. Une valeur de falsey si nous ne voulons pas contester.
Nous contestons toujours si nous savons qu'ils ont triché. Nous savons qu'ils ont triché s'ils jouaient aux cartes qu'ils ne pouvaient pas avoir:
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
L'autre fois que nous contestons, c'est s'ils jouent leurs dernières cartes. Même si le jeu est légitime, il mettrait fin au jeu, alors nous pourrions aussi bien le défier.
1
1 # They'd win, so challenge anyway
Plus de cas de test
Truthy (devrait contester)
11445678?
22
-------------
????????
4
4444
-------------
12345678
9
Falsey (ne devrait pas contester)
1?
222
2
-------------
12?
22
22
-------------
?????
1111
Notation
Le code le plus court gagne.
la source
Réponses:
Pyth, 22 octets
Essayez-le en ligne.
la source
JavaScript (ES6), 93 octets
Accepte trois chaînes de cartes (caractères
0
-9
ou?
); revient1
pour le défi,0
sinon. Explication:la source
C # 6, 134 octets
(Remarque: conformément à l'exemple de OP, cette réponse est fausse même si l'adversaire a plus d'une carte et joue toute sa main. En termes de stratégie, cela devrait retourner vrai.)
Explication:
a
: Main du joueurb
: Cartes que je connais vraiment ...c
: Cartes prétendant jouerNon golfé:
la source
a.Length==1
êtrea.Length==c.Length
. Vous semblez impliquer quelque chose comme ça dans votre note, mais je ne sais pas à quel exemple de PO vous faites référence qui permet que plus de cartes soient jouées que le nombre de cartes que l'adversaire a en main.Java 8,
169135 octetsExplication:
Essayez-le ici.
REMARQUE:
(s+0).split("c",-1).length-1
donne le nombre de fois où le caractèrec
apparaît dans la chaînes
. Les commentaires dans l'explication ci-dessus sont donc corrects, mais le code peut sembler différent à cause de cela. Le(a+0).split(x+"|\\?",-1).length-1<C
est joué au(a+0).split(x+"|\\?",-1).length<=C
et le4-(b+0).split(""+x,-1).length-1<C
est joué au5-(b+0).split(""+x,-1).length<C
.la source