Le croupier a été bâclé et a perdu la trace des cartes que contient son deck et quelles cartes manquent, pouvez-vous l'aider?
Un jeu complet se compose de 52 cartes à jouer, à savoir:
Chaque couleur du jeu (cœurs, diamants, piques, massues) contient:
- Les chiffres [2 - 10]
- Une prise
- Une reine
- Un roi
- Un as
Tâche
Votre programme lira le contenu du jeu depuis STDIN jusqu'à ce qu'une nouvelle ligne soit lue. Vous pouvez supposer que l'entrée sera sous la forme de "nX nX nX nX" etc. où:
- n - tout nombre compris entre [2 - 10] ou «J», «Q», «K» ou «A». (Vous ne pouvez utiliser les majuscules que pour les caractères non numériques)
- X - l'un des éléments suivants: «H», «D», «S», «C» (vous pouvez uniquement supposer les majuscules)
Où:
- «J» = Jacks
- 'Q' = Reine
- «K» = Roi
- «A» = Ace
Et
- «H» = coeurs
- «D» = diamants
- «S» = pique
- 'C' = Clubs
Vous pouvez supposer qu'il n'y aura pas de doublons dans l'entrée.
Votre programme doit ensuite imprimer les cartes manquantes dans le jeu sur STDOUT de la même manière que l'entrée ("nX nX nX") ou imprimer "Aucune carte manquante" si les 52 cartes sont fournies. Il n'y a pas de contrainte sur l'ordre de sortie des cartes.
Exemple d'entrée:
9H AH 7C 3S 10S KD JS 9C 2H 8H 8C AC AS AD 7D 4D 2C JD 6S
Production:
3H 4H 5H 6H 7H 10H JH QH KH 2D 3D 5D 6D 8D 9D 10D QD 2S 4S 5S 7S 8S 9S QS KS 3C 4C 5C 6C 10C JC QC HC
Bon golf!
T
place de10
?J
représente pas10
, cependant?2 3 4 5 6 7 8 9 10 J Q K A
.J
représente11
.J
est la 10e lettre de l'alphabet, mais ce n'est pas de cela qu'il s'agit. :)Réponses:
Windows Batch (CMD),
205204 octetsBoucle sur les combinaisons et les rangs pour construire un jeu complet, puis supprime les cartes d'entrée. Enregistrez 1 octet si
T
est autorisé à la place de10
. Enregistrez 11 octets si les arguments de ligne de commande sont des entrées acceptables. Edit: 1 octet enregistré grâce à @ user202729.la source
/v
en CMD (+3 octets?) PourEnableDelayedExpansion
, éliminercall
dans la boucle for. / Semble que vous avez un espace supplémentaire entre(%c%)
etdo
?Python,
147146145138131129 129127125120 octetsObtient toutes les cartes possibles en tant qu'ensemble et soustrait les cartes d'entrée.
-1 octet grâce à mbomb007 soulignant un espace supplémentaire dans mon code.
-1 octet grâce à mbomb007 pour avoir souligné le golf qui peut être fait avec Python 2 (-5 octets et +4 octets pour
raw_
inraw_input
)-7 octets en passant à l'utilisation des ensembles et à la soustraction des ensembles au lieu des listes de compréhension
-7 octets grâce à ValueInk pour avoir souligné que je n'ai pas besoin
list
des suites-2 octets grâce à Datastream pour avoir souligné que l'écriture de toutes les valeurs est plus efficace en octets que la chose étrange que j'avais auparavant
-2 octets grâce à ValueInk pour avoir souligné que les ensembles peuvent prendre des générateurs donc je n'ai pas besoin de le mettre dans une liste de compréhension
-2 octets grâce à Datastream pour avoir souligné que je peux jouer au golf encore plus si je passe à nouveau à Python 3 ... (+2 pour les parens après pour l'impression, -4 pour
raw_
)-5 octets grâce à Lulhum et moi-même pour avoir pointé que le fait de revenir à Python 2 (!!!) peut m'aider à économiser des octets (en utilisant à nouveau la plage, en utilisant des raccourcis au lieu de
str(
, et +4 en raison deraw_
)la source
`d`
au lieu destr(d)
si vous utilisez Python 2, en plus de supprimer les parens pourprint
.for y in 'HDSC'
fonctionne également pour obtenir tous les personnages là-dedans. (Vous avez toujours besoinlist('JQKA')
de l'autre partie, cependant.)'1 2 3 4 5 6 7 8 9 10 J Q K A'.split()
Pourrait économiser quelques octets au lieu de la manipulation[
d quefor d in range(2,11)]+list('JQKA')
vous avez en cours.1
n'a pas besoin d'être ajouté. En outre, vous pouvez supprimer les crochets externes pour votre première compréhension de liste, car leset
constructeur accepte très bien les objets générateurs.05AB1E , 39 octets
Essayez-le en ligne!
Explication
la source
CJam ,
4947 octetsEssayez-le en ligne!
Explication
la source
Gelée , 39 octets
Essayez-le en ligne!
Comment?
la source
C #, 343 octets
La première fois que je poste un de mes golfs, ce n'est pas un très bon candidat. Je suis sûr que je peux réduire davantage cela.
L'idée derrière cela est un tableau clairsemé stockant les occurrences de cartes, avec des index calculés par les valeurs ASCII des différentes valeurs et combinaisons multipliées les unes contre les autres (par exemple, un as de pique (AS) serait stocké dans la zone à l'index (65 * 83 = 5395)). De cette façon, chaque type de carte obtient un index unique qui peut être vérifié ultérieurement pour l'existence dans le tableau "map".
la source
PowerShell ,
114111110 octetsEssayez-le en ligne!
Prend l'entrée en
$n
tant que chaîne délimitée par des espaces ou délimitée par des sauts de ligne. Construit un tableau à partir de la plage2..10
concaténée avecJQKA
(indexé avec[0..3]
pour en faire unchar
tableau). Ce tableau est introduit dans une boucle|%{}
qui définit l'assistant,$i
puis boucle sur les combinaisons pour concaténer les résultats avec$i$_
. À la fin de cette boucle, nous avons un tableau de chaînes comme("2C", "2S", "2H", ... "AH", "AD")
. Ce tableau est introduit dans unWhere-Object
(|?{}
) avec le filtre comme ces éléments$_
qui regexent-notmatch
l'entrée$n
. Le résultat de ce filtrage est stocké dans$a
.Ensuite, nous utilisons un pseudo-ternaire
( , )[]
pour sélectionner si nous produisons'No missing cards'
ou$a
, selon qu'il!!$a
se transforme en booléen$false
ou$true
. Si$a
est vide (ce qui signifie que chaque carte du paquet est dans l'entrée), alors l'!!$a
est0
, donc le"No missing cards"
est sélectionné. Vice versa pour$a
être sélectionné. Dans les deux cas, cela reste sur le pipeline et la sortie est implicite.la source
Bash + coreutils, 89
E / S en tant que liste délimitée par des sauts de ligne.
Explication
sort
lit les entrées délimitées par des sauts de ligne de STDIN et les triecomm
printf %s\\n {10,{2..9},A,J,K,Q}{C,D,H,S}
est une extension d'accolade pour générer le jeu complet de cartes. Leprintf
imprime chaque carte sur sa propre ligne. L'ordre est donné de telle sorte que la sortie est la même que si elle avait été canalisée verssort
comm
compare la platine complète à l'entrée triée et génère la différence.-3
supprime la sortie de la colonne 3 (les plus courantes)comm
est canalisé versgrep .
. S'il n'y a pas eu de sortiecomm
(c'est-à-dire que toutes les cartes étaient en entrée), la||
clause "ou" renvoie le message requis. Sinon, legrep .
correspond à toutes les lignes issues decomm
.Essayez-le en ligne .
la source
Python 2 ,
104,93,130, 114 octetsEssayez-le en ligne!
la source
list('23456789JQKA')+['10']
intelligent. J'étais en train de me casser la tête pour une meilleure façon de séparer la10
liste des caractères uniques dans l'autre réponse en python, mais cela fonctionne à merveille.Ruby, 108 + 1 = 109 octets
Utilise le
-p
drapeau.la source
PHP, 143 octets
la source
sed , 157 + 1 (
-r
flag) =170158 octetsEssayez-le en ligne!
Cela génère toutes les cartes possibles, puis supprime chaque carte de l'entrée des cartes générées.
la source
C # , 282 octets
Golfé
Non golfé
Non lisible non lisible
Code complet
Communiqués
282 bytes
- Solution initiale.Remarques
Rien à ajouter
la source
JavaScript (ES6),
117114111 octetsCela tire parti du fait que les entrées non définies dans le tableau généré par
map()
sont contraintes à des chaînes vides lorsquejoin()
'd.Démo
Afficher l'extrait de code
la source
Rétine , 76 octets
L'entrée / sortie est une liste de cartes séparées par des espaces. La sortie a un espace de tête.
Essayez-le en ligne!
Explication
La plupart du code traite de la construction de la liste complète des cartes qui devraient être dans le jeu:
D'abord, nous ajoutons une nouvelle ligne à l'entrée, avec toutes les valeurs possibles des cartes, puis pour chaque personnage de cette ligne (ou le couple de caractères
10
) nous construisons la liste de toutes les combinaisons possibles de cette carte.Il s'agit d'une étape de déduplication, elle divise la chaîne en morceaux constitués d'un espace plus quelques non-espaces et ne conserve qu'une seule occurrence de chaque bloc. Le modificateur le
r
fait fonctionner de droite à gauche, en gardant alors la dernière occurrence de chaque morceau.Nous ne conservons que la première ligne, qui contient désormais les cartes manquantes.
Si le résultat est vide, nous le remplaçons par "Aucune carte manquante"
la source
Python 3, 106 octets
Combinaison des deux réponses python précédentes mélangées à des manigances de déballage de chaînes.
la source
Julia , 116 octets
Essayez-le en ligne!
Très similaire à la solution de python Kyle Gullions. Setdiff au lieu de - et le lambda pour tester la chaîne vide aggravent cependant.
la source
Japt, 39 octets
Essayez-le
la source
Tcl ,
270228 caractères(Raccourci avec l'aide de Wît Wisarhd)
Essayez-le en ligne!
Explication:
Cette implémentation construit un dictionnaire composé d'un drapeau booléen pour chacune des cartes représentées par le produit cartésien de HDSC et 2-through-A. Il lit la ligne de stdin, qui, si elle est indiquée comme spécifiée, est en fait une liste Tcl bien formée. Au fur et à mesure que chaque carte est lue, un booléen true est entré dans le dictionnaire pour cette carte.
À la fin, un analyseur parcourt le dictionnaire et ajoute toute carte qui n'avait pas de vrai dans le dictionnaire à une liste de cartes manquantes. Si la longueur de la liste des cartes manquantes est nulle, affichez «Aucune carte manquante», sinon affichez la liste des cartes manquantes.
la source
PHP , 138 octets
Ran avec
-n
et-d error_reporting=0
Je réutilise du code d'une ancienne soumission que j'ai faite qui demandait de créer un jeu de cartes
Code
Essayez-le en ligne!
Explication
la source
$argv
puisse fonctionner comme ça, merci @gwaughC # (.NET Core) , 197 octets
Sans LINQ.
Essayez-le en ligne!
la source
Perl 6 , 73 octets
Essayez-le en ligne!
Une soustraction d'ensemble assez simple entre le jeu de cartes et l'entrée.
la source
Python 3 , 102 octets
Essayez-le en ligne!
la source