Avertissement: ModTen est un jeu de cartes fictif qui a été créé dans le seul but de ce défi.
Les règles de ModTen
ModTen se joue avec un jeu de 52 cartes standard. Parce que les règles complètes n'ont pas encore été inventées, nous allons nous concentrer exclusivement sur le classement des mains.
Une main gagnante dans ModTen. Graphiques de Wikipedia .
Valeurs des cartes
Les cartes ont les valeurs suivantes:
- 2 à 9 : valent leur valeur nominale
- Dix : 0 point
- Jack : 3 points
- Reine ou roi : 8 points
- As : 9 points
Valeurs des mains
Une main ModTen est composée de deux cartes . La valeur de base d'une main est obtenue en multipliant la valeur des deux cartes ensemble et en gardant le dernier chiffre uniquement (c'est-à-dire en appliquant un modulo 10).
La seule autre règle de ModTen est que les cartes adaptées valent plus que les cartes non adaptées. Par convention, nous allons ajouter un "s" à la valeur si les deux cartes sont de la même couleur.
Par exemple, la valeur de 9 ♠ - 5 ♠ sera notée comme " ", car et les cartes conviennent.
Classement des mains et vainqueur
Les règles ci-dessus donnent 18 rangs de mains distincts qui sont résumés dans le tableau suivant, du plus fort au plus bas (ou du plus rare au plus courant). Les probabilités sont données à titre indicatif.
Étant donné deux mains, la main avec le rang le plus bas gagne. Si les deux mains sont du même rang, alors c'est un match nul (il n'y a pas de bris d'égalité).
hand rank | hand value(s) | deal probability
-----------+---------------+------------------
1 | 9s | 0.30%
2 | 3s | 0.60%
3 | 1s | 0.90%
4 | 7s | 1.21%
5 | 5s | 1.51%
6 | 3 | 1.81%
7 | 9 | 2.26%
8 | 8s | 2.71%
9 | 6s | 3.02%
10 | 1 or 7 | 3.62% each
11 | 2s or 4s | 3.92% each
12 | 5 | 4.98%
13 | 0s | 5.43%
14 | 8 | 8.14%
15 | 6 | 9.95%
16 | 2 | 11.76%
17 | 4 | 13.57%
18 | 0 | 16.74%
Le défi
Étant donné deux aiguilles ModTen , affichez l' une des trois valeurs cohérentes de votre choix pour savoir si:
- le premier joueur gagne
- le deuxième joueur gagne
- c'est un match nul
Les règles suivantes s'appliquent:
- Une carte doit être décrit par son rang en majuscules (
2
,3
, ...,9
,T
,J
,Q
,K
ouA
) suivi de son costume en minuscules (c
,d
,h
ous
, pour les clubs, diamants, coeurs et piques). - Vous pouvez utiliser à la
"10"
place de"T"
mais toute autre substitution est interdite. Tant que les règles ci-dessus sont respectées, vous pouvez prendre les mains dans n'importe quel format raisonnable et sans ambiguïté. Vous êtes autorisé à prendre le rang et la combinaison en deux caractères distincts plutôt qu'en une seule chaîne.
Certains formats d'entrée valides sont:
"7c Qh 8s Ks"
[["7c","Qh"], ["8s","Ks"]]
[[['7','c'], ['Q','h']], [['8','s'], ['K','s']]]
- etc.
Au lieu d'utiliser 3 valeurs distinctes cohérentes, votre sortie peut également être négative , positive ou nulle . Veuillez spécifier le format de sortie utilisé dans votre réponse.
- C'est du code-golf .
Cas de test
Le joueur 1 gagne
["Js","3s"], ["Ks","Kh"]
["7h","9h"], ["9s","7c"]
["Ah","5s"], ["Ts","8s"]
["Ts","8s"], ["Jh","2s"]
["4h","8s"], ["Qh","Ks"]
Le joueur 2 gagne
["Th","8d"], ["6s","Kd"]
["Jc","5c"], ["3s","9s"]
["Jc","Jd"], ["9h","Ah"]
["2d","4d"], ["3h","3s"]
["5c","4c"], ["3c","2c"]
Dessiner
["Js","3s"], ["3d","Jd"]
["Ah","Ac"], ["3d","9s"]
["Qc","Kc"], ["6d","4d"]
["2d","3d"], ["3s","2s"]
["Ts","9c"], ["4h","5d"]
la source
{{J, s}, {3, s}}
ça irait ?Réponses:
Python 3 ,
114110 octetsEssayez-le en ligne!
@Arnauld a proposé l'idée de fusionner les chaînes de valeur des cartes et de classement. Après quelques tentatives, j'ai réussi à créer une chaîne fusionnée
R="T 2J45UNK9RL<3SLM;QAK:O>=/678"
, qui a la même longueur que la chaîne de valeur de la carte d'origine. Le sous - chaîneR[6:25]="UNK9RL<3SLM;QAK:O>=/"
sert la table de rang ainsi qu'une valeur de la carte table de recherche pour3
,9
,A
,K
etQ
. Le décodage en valeur ASCII de la nouvelle table de classement a le même effet de classement que la table de classement précédente.L'utilisation de chaînes d'octets en entrée permet d'économiser 4 octets.
L'utilisation
cmp
dans Python 2 peut réduire la solution à 102 octets, comme le montre la solution @ xnor .Python 3 ,
165142 142130129 octetsEssayez-le en ligne!
-23 octets grâce à @Jonathan Allan
-2 octets grâce à @ovs
-1 octet grâce à @mypetlion
Non golfé:
La fonction
f
prend deux arguments représentant la main du joueur 1 et du joueur 2. Elle renvoie une valeur positive, négative ou nulle dans le cas d'une victoire de joueur 1, de victoire de joueur 2 ou d'un match nul, en conséquence. Chaque main est codée comme une chaîne unique, par exemple "7cQh".la source
"HC92FA51GAB4E893D760"[s==t::2]
cmp
(n'est pas disponible en Python 3)str.find
au lieu destr.index
pour enregistrer un octet. La seule différence de comportement entre les deux méthodes est queindex
génère une erreur lorsque l'élément n'est pas trouvé, tandis quefind
renvoie-1
. Ce ne sera donc pas un problème pour votre code.Assemblage x86-16,
8783 octetsBinaire:
Non assemblé:
L'entrée est une chaîne telle que
Js3sKsKh
, au pointeur dansSI
. La sortie estZF = 0 and SF = OF
(test avecJG
) si le joueur 1 gagne,SF ≠ OF
(test avecJL
) si le joueur 2 gagne ouZF
(test avecJE
) si un match nul.Sortie à l'aide du programme de test DOS:
Téléchargez et testez MODTEN.COM pour DOS.
la source
05AB1E ,
4137 octets-4 octets grâce à @Grimy .
Entrez sous forme de liste de liste de liste de caractères, comme le troisième exemple de format d'entrée dans la description du défi. C'est-à-dire P1
7c Qh
et P28s Ks
serait entré comme[[["7","c"],["Q","h"]],[["8","s"],["K","s"]]]
. (Et utilise"10"
pour10
.)Produit un entier négatif si le joueur 1 gagne; un entier positif si le joueur 2 gagne; ou 0 si c'est un match nul.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir cette astuce 05AB1E (sections Comment utiliser le dictionnaire? Comment compresser les grands entiers? Et Comment compresser les listes d'entiers? ) Pour comprendre pourquoi
•V›{₆Ÿ&∊WÍj¸•
est36742512464916394906012008
,•V›{₆Ÿ&∊WÍj¸•19в
est[18,10,16,6,17,12,15,10,14,7,13,3,11,2,11,5,9,4,8,1]
,‘ߌQ‘
est"JAKEQ"
etŽćS
est39808
.la source
T
comme10
, vous pouvez donc simplement supprimer leT
deJTQKA
(et utiliser un entier compressé 3889 au lieu de 30889). , AussiT* ... +
pourrait être... «
.10
T
T*...+
...«
PHP ,
212185178149 octetsEssayez-le en ligne!
L'entrée se fait via la ligne de commande. La sortie vers
STDOUT
est négative si le joueur 1 gagne, positive si le joueur 2 gagne, en0
cas d'égalité. Exemple:la source
-1
,1
ou0
.Gelée , 46 octets
Essayez-le en ligne!
Un programme complet prenant comme argument par exemple
["7h","Ks"],["4s","Ts"]
et affichant zéro si les deux joueurs tirent au sort, positif si le joueur 1 gagne et négatif si le joueur 2 gagne.la source
C (gcc) ,
172167165164 octetsEssayez-le en ligne!
2 octets rasés grâce à @ceilingcat!
Fondamentalement, un port de la solution Python3 de @ Joel, mais sans l'encodage base18. Attend l'entrée comme une chaîne avec un espace séparant les mains des deux joueurs, et produit un entier positif, négatif ou nul pour indiquer que le joueur 1 gagne, le joueur 2 gagne ou s'il s'agit d'un match nul.
la source
Perl 6 ,
1011009488 octets-1 octet grâce à Jo King
Essayez-le en ligne!
Prend l'entrée comme
f(((<J ♠>, <3 ♠>), (<10 ♠>, <K ♥>)))
utilisant10
pour Ten. Renvoie une valeur <0 si le joueur 1 gagne,> 0 si le joueur 2 gagne, 0 s'il s'agit d'un match nul.Explication
la source
Fusain , 97 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend l'entrée sous la forme de deux chaînes de 4 caractères, par exemple
QcKc
6d4d
et génère un entier signé. Explication:La chaîne compressée
2345678903889
représente les valeurs de la carte.Faites une boucle sur chaque paire de valeurs possible.
Faites une boucle sur chaque deuxième combinaison de cartes possible. Sans perte de généralité, nous pouvons supposer que la première carte a la couleur 3, de sorte que la deuxième couleur de la carte peut aller de 0 à 3, sauf si les valeurs sont les mêmes, auquel cas elle ne peut aller que de 0 à 2.
Calculez le score modifié de la main, qui est la valeur de la main doublée, plus 1 si les couleurs sont les mêmes (c'est-à-dire que la deuxième carte a la couleur 3).
La chaîne compressée
23456789TJQKA
représente les caractères de la carte. Les cartes d'entrée sont recherchées dans cette chaîne, puis la position est utilisée pour indexer dans la première chaîne pour obtenir la valeur de la carte.Initialisez le résultat à 0.
Boucle sur les deux mains.
Calculez le score modifié de la main, et donc sa fréquence, et soustrayez-en le résultat.
Sortez la différence de fréquence.
la source
C # (Visual C # Interactive Compiler) , 139 octets
Essayez-le en ligne!
la source
Perl 5
-p
, 107 octetsEssayez-le en ligne!
Contribution:
(En fait, la virgule peut être n'importe quel caractère.)
Sortie:
la source