Votre ami vous a invité à un jeu de poker à enjeux élevés à la dernière minute et, en tant qu'informaticien, vous avez décidé d'utiliser vos compétences pour prendre l'avantage sur le jeu. Votre tâche sera, étant donné 2 cards
(votre main) et 0, 3, 4 or 5 cards
(les cartes distribuées), vous devez décider quelle sera la meilleure main possible. Si les 7 cartes sont fournies comme arguments, la réponse est assez claire. S'il est donné moins, le problème devient plus complexe. Cependant, cela ne suffit pas pour vous donner l'avantage que vous recherchez, vous devez également calculer la meilleure main possible à partir des cartes restantes pour comprendre ce que vos adversaires pourraient également avoir.
Rappel de Hold'em
Si vous ne connaissez pas le Hold'em, chaque joueur du jeu commence avec 2 cartes comme «main». Au cours de 3 «tours», des cartes supplémentaires se révèlent être partagées entre tous les joueurs. Le premier tour, 3 cartes sont révélées. La deuxième, 1 de plus et la troisième fois, une dernière carte est révélée. Les deux cartes données en premier représentent votre main, tandis que celle-ci représente 0, 3, 4 ou 5 cartes données par les tours successifs.
Numéros possibles:
[2,3,4,5,6,7,8,9,T(10),J,Q,K,A]
Costumes possibles:
[S,C,H,D]
Pont complet:
[2S,3S,4S,5S,6S,7S,8S,9S,TS,JS,QS,KS,AS, # Spades.
2C,3C,4C,5C,6C,7C,8C,9C,TC,JC,QC,KC,AC, # Clubs.
2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH,AH, # Hearts.
2D,3D,4D,5D,6D,7D,8D,9D,TD,JD,QD,KD,AD] # Diamonds.
Classements des mains:
1:Royal Flush (A-K-Q-J-10, all from the same suit).
2:Straight Flush (Sequential cards, all from the same suit).
3:Four-of-a-Kind (Self explanatory).
4:Full House (3-of-a-kind and a 2-of-a-kind).
5:Flush (All cards are from the same suit).
6:Straight (Sequential Cards, any suits).
7:3-of-a-Kind (Self explanatory).
8:2-Pair (Double 2-of-a-Kind).
9:Pair (2-of-a-Kind).
10:High Card (You have absolutely nothing except a single card).
Prenons un exemple ou deux et parcourons-les:
L'exemple simple:
[AS, AC],[AH,AD,9S,9C,9H]
-> 3
(Four-of-a-Kind), 3
(Four-of-a-Kind)
La meilleure main possible que vous aurez dans cette configuration est la main unique. La meilleure main possible que vos adversaires pourraient avoir est également un 4-of-a-Kind, car vous ne pouvez pas avoir un KQJ10 dans leurs mains à 2 cartes.
[5C,2C],[6C,4C,JH,JD]
-> 2
(Quinte Flush), 3
(4-of-a-Kind)
Vous êtes à risque pour une quinte flush, mais parce que vous avez le 2 / 5C en main, personne d'autre ne doit vous tenir les deux cartes du milieu. Le mieux qu'ils puissent espérer est d'avoir 2 Jacks de poche et d'avoir un Jack au flop.
[JS,JC],[]
-> 1
(Royal Flush), 1
(Royal Flush)
Aucune information que vous pouvez utiliser contre eux n'a été donnée, tout ce que vous pouvez dire pour le moment, c'est qu'ils ne peuvent avoir qu'une couleur royale dans les diamants / coeurs, mais il est tout aussi possible que vous obteniez la couleur royale comme eux. En fait, toutes les entrées où le flop n'a pas encore eu lieu devraient entraîner une réponse 1-1.
[2C,4S],[3C,7S,9D,AH,JD]
-> 10
(High Card), 7
(3-of-a-Kind)
Ceci est un exemple de l'endroit où vous êtes absolument foutu, et il n'y a aucune possibilité d'une ligne droite ou d'une chasse d'eau compte tenu de la rivière. Ce qui signifie que la meilleure main ici est des as de poche, ce qui donne un 3-of-a-Kind.
Exigences d'E / S
- L'apport doit être séparé entre ce qui est dans votre main et ce qui est du public; ce sera probablement plus facile de cette façon, quelle que soit la mise en œuvre.
- Les cartes peuvent être des tuples ou des chaînes, selon vous.
- La main et le terrain de jeu peuvent être des tableaux ou des chaînes délimitées.
- La sortie doit être deux index de la liste des mains que j'ai fournies (EG [2,1]).
- Il peut être renvoyé dans le cadre d'une fonction, imprimé sur la console ou sorti d'une manière appropriée.
- Il doit y avoir deux valeurs distinctes, l'une pour votre meilleure main, l'autre pour la meilleure possible.
- 10 peut être représenté comme un
T
ou comme10
, selon ce qui vous convient . - Les failles standard ne sont pas autorisées.
Critères gagnants
- Il s'agit du code-golf , le nombre d'octets le plus bas avec un bris d'égalité de la date de publication.
la source
A
et parmi1
les éventuelles cartes autorisées? De plus, je ne pense pas qu'il y ait vraiment une raison impérieuse d'exiger les abréviations de visage sur des valeurs numériques comme11
.A
et un1
. Tout le reste a l'air bien.Réponses:
Haskell ,
433 430425 octets-5 octets grâce à @Laikoni
Essayez-le en ligne!
Non golfé (même idée, structure légèrement différente):
Très lent, car il n'y a pas de boîtier spécial du tout (par exemple, si aucune carte n'a été montrée, un flush royal est toujours possible.) La plupart de mes efforts de golf sont allés dans la
rank_hand
fonction;#
peut être joué beaucoup plus en combinant des cartes et autres.hand#table
calcule les scores optimaux pour vous et votre adversaire. Ne vérifie pas les erreurs.la source
s/elem/e/g
définire=elem
, ce qui devrait vous faire économiser 9 octets. Je pense que vous pouvez également supprimer certains espaces, en particulier lorsque les identifiants suivent directement les chiffrese=elem
inféré Int-> Bool, donc il ne se compilait pas lorsque j'utilisais e pour des appels elem non entiers. J'essaie de comprendre pourquoi. Merci pour le conseil sur les espaces!h#t=let[...]in[...]
peut être raccourcih#t|let[...]=[...]
. Aussihead n
estn!!0
. Dans une garde&&
peut être tout simplement,
.