introduction
Il y a longtemps, lorsque je codais des jeux de cartes avec des cartes à jouer habituelles, je spécifiais un numéro pour chaque carte et appelais une fonction avec un certain nombre pour obtenir une carte. Cela m'a un peu inspiré pour relever ce défi.
Ainsi, pour les personnes qui ne connaissent pas les cartes à jouer, un jeu de cartes se compose de 52 cartes (13 dans chacune des quatre couleurs, c.-à-d. Coeurs, Diamants, Pique, Clubs). Dans chaque couleur, il y a 13 cartes - d'abord les cartes numérotées de 2 à 10, puis le valet (J), la reine (Q), le roi (K) et l'as (A). C'est l'ordre
Défi
Le défi est de prendre un entier entre 1-52 en entrée et d'afficher la carte à cette position. Mais, votre sortie doit être en mots. De plus, l'ordre doit être maintenu, c'est-à-dire que les 13 premières cartes seront des coeurs, puis des diamants, puis des piques et enfin des clubs.
Par exemple, si quelqu'un choisit le numéro, la 30
carte appartiendrait alors à la troisième couleur, c'est-à-dire les piques. En outre, ce serait la quatrième carte de la couleur, ce qui signifie le numéro 5. Par conséquent, votre sortie en mots doit être: five of spades
et elle doit toujours suivre ce format , c'est-à-dire d'abord la carte, suivie d'un of
et du nom de la couleur à la fin, avec les espaces requis entre les deux.
Entrée et sortie
L'entrée sera un entier compris entre 1 et 52 (les deux inclus). Notez que le décompte commence ici à partir de 1. Vous pouvez choisir de commencer à partir de 0 . Cependant, vous devez conserver l'ordre des cartes mentionné ci-dessus. Votre sortie devrait être la carte à cette position écrite en mots. Vous n'avez pas besoin de gérer des entrées non valides. En outre, votre sortie peut être en minuscules ou en majuscules.
Ci-dessous se trouve la liste de toutes les entrées possibles et de leurs sorties:
1 -> two of hearts
2 -> three of hearts
3 -> four of hearts
4 -> five of hearts
5 -> six of hearts
6 -> seven of hearts
7 -> eight of hearts
8 -> nine of hearts
9 -> ten of hearts
10 -> jack of hearts
11 -> queen of hearts
12 -> king of hearts
13 -> ace of hearts
14 -> two of diamonds
15 -> three of diamonds
16 -> four of diamonds
17 -> five of diamonds
18 -> six of diamonds
19 -> seven of diamonds
20 -> eight of diamonds
21 -> nine of diamonds
22 -> ten of diamonds
23 -> jack of diamonds
24 -> queen of diamonds
25 -> king of diamonds
26 -> ace of diamonds
27 -> two of spades
28 -> three of spades
29 -> four of spades
30 -> five of spades
31 -> six of spades
32 -> seven of spades
33 -> eight of spades
34 -> nine of spades
35 -> ten of spades
36 -> jack of spades
37 -> queen of spades
38 -> king of spades
39 -> ace of spades
40 -> two of clubs
41 -> three of clubs
42 -> four of clubs
43 -> five of clubs
44 -> six of clubs
45 -> seven of clubs
46 -> eight of clubs
47 -> nine of clubs
48 -> ten of clubs
49 -> jack of clubs
50 -> queen of clubs
51 -> king of clubs
52 -> ace of clubs
Notation
C'est le code-golf , donc le code le plus court l'emporte.
la source
two\s\s\sof\shearts
où\s
se trouve un espace? (Notez les deux espaces supplémentaires.)Réponses:
Python 3 ,
11590 octetsUne fonction sans nom renvoyant la chaîne en majuscules.
Essayez-le en ligne!
Comment?
Les caractères Unicode ont des noms. Les noms de certains d'entre eux sont comme "JOUER UNE CARTE DEUX PESES", donc nous pouvons obtenir les caractères du caractère Unicode représentant la carte requise et retirer les 13 premiers caractères pour obtenir notre sortie.
Les caractères Unicode d'intérêt sont dans un bloc comme ceci:
Lorsque ce
x
ne sont pas des caractères que nous recherchons (les quatre dans laC
colonne sont des "chevaliers"; trois enF
sont des "farceurs"; un en0
est générique; les autres sont des caractères réservés).En tant que tel, nous pouvons ajouter une valeur à 0x1F0A1 = 127137 (As) pour trouver la carte que nous voulons.
La valeur à ajouter n'est compliquée que par trois choses:
L'utilisation de l'option d'indexation unique permet d'utiliser une division entière négative pour indexer dans un tableau de décalages par ligne pour la réorganisation de la combinaison avec
[6,0,4,2][-n//13]*8+
(effectivement[48,0,32,16][-n//13]
), nous pouvons ensuite également placer les as aux emplacements corrects avecn%13+
puis éviter la chevaliers en colonneC
avecn%13//11+
(effectivement(n%13>10)+
).la source
Perl6 / Rakudo 70 octets
Index 0
Utilisation
perl6 -pe
et sans compression de dictionnaire:Il recherche simplement la carte en Unicode (à partir de l'As), demande le nom et l'utilise. C'est un itinéraire similaire (bien que je ne le connaissais pas à l'époque!) À la réponse Python de Jonathan Aitken - seulement j'indexe à partir des 4 as plutôt que 4 décalages de l'as de pique, et je multiplie par 1,091 pour faire l'index autour de l'entrée Knight dans Unicode.
Voir toutes les sorties (pour les valeurs d'entrée 0 à 51) https://glot.io/snippets/ez5v2gkx83
Modifié pour faire face aux chevaliers dans le jeu Unicode, car Unicode.
Perl6 ♥ Unicode
la source
05AB1E , 54 octets
0 indexé
Essayez-le en ligne!
Explication
la source
“»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»
- 54 octets aussi!Python 2 ,
167148 octetsZéro indexé.
Essayez-le en ligne!
EDIT: Bubbler a fait un bon point en utilisant la méthode de partage (et en fournissant une réponse plus courte). Sur le deuxième bloc, l'utilisation de split () donne le même nombre d'octets.
la source
[n%13::13]
quelque chose, mais pas de chance.s
; xnor l'a souligné dans le chat.R , 154 octets
Essayez-le en ligne!
Prend l'entrée (indexée 1) de STDIN et avec
source(...,echo=T)
affichera le résultat sur la console.Ce n'est pas joli, MAIS il est disponible en 2 octets de moins que la meilleure solution que j'ai pu utiliser
outer
(présentée ci-dessous), alors laissez- moi vous rappeler d'examiner une autre approche!R , 156 octets
Essayez-le en ligne!
Essentiellement les mêmes que ci-dessus; cependant,
outer
fera le recyclage correctement, mais avoir à réglersep=" of "
pour lepaste
fait cela juste un cheveu plus long.la source
Emojicode , 202 octets
0 indexé. Essayez-le en ligne!
Explication :
la source
Excel, 156 octets
Cartes de 0 à 51. Malheureusement, Excel ne dispose pas d'une fonction pour convertir
1
en"one"
...Utiliser
TRIM
etMID
est plus court que l'utilisationCHOOSE
pour les valeurs faciales, mais plus long que l'utilisationCHOOSE
pour le costume.la source
MID()
et combinant les mots!Java 8, 141 octets
L'entrée est indexée 0.
Explication:
Essayez-le en ligne.
la source
Kotlin ,
154152140 octetsEssayez-le en ligne!
Mis à jour pour utiliser uniquement l'expression lambda.
la source
JavaScript ES6,
124118 Octets, 0-indexVersion Base64
la source
Stax ,
585756 octetsExécuter et déboguer
Voici la représentation non golfée commentée du même programme. Il utilise fortement les littéraux compressés de stax. L'entrée est indexée 0. Il s'agit de l'algorithme 05AB1E d'Emigna.
Exécutez celui-ci
la source
Bash, 133 octets
Choisir d'utiliser 0 en fonction de l'option donnée, en soutenant 0 (deux de cœur) à 51 (as de clubs)
la source
Husk , 52 octets
Essayez-le en ligne!
Je suis toujours heureux de montrer le système de compression de cordes de Husk: D
Explication
La majorité du programme (à
¨
partir de) est évidemment une chaîne compressée. Lorsqu'il n'est pas compressé, il se transforme en:Le programme est alors:
Il reste quelques éléments à expliquer:
Nous construisons les cartes avec des combinaisons avant les valeurs en raison du fonctionnement du produit cartésien
Π
: si nous le faisions dans l'autre sens, la liste des cartes serait ordonnée par valeur (c'est-à-dire deux de coeurs, deux de diamants, deux de piques, deux de clubs, trois de coeurs ...). En conséquence, nous devons inverser notre résultat.Le résultat du programme est une matrice bidimensionnelle de chaînes. Ceci est automatiquement imprimé par Husk comme une chaîne unique construite en joignant des lignes de la matrice avec des sauts de ligne et des cellules avec des espaces. La raison pour laquelle nous construisons cette matrice au lieu d'utiliser la plus simple
w
(joindre une liste de mots avec des espaces) est que si l'utilisationw
du type inféreur suppose une autre interprétation pour le programme, produisant un résultat différent.la source
mIRCScript , 157 octets
Charge comme un alias, puis utilisez:
/c N
. mIRC est indexé 1, donc la division du plancher (//) sur la valeur négative de l'entrée produit -1 à -4 selon les besoins.la source
C (gcc) , 148 octets
Essayez-le en ligne!
Basé sur 0.
la source
\0
par des octets nuls littéraux.Haskell , 132 octets
Essayez-le en ligne!
Une fonction anonyme, utilisant la compréhension de la liste pour construire toutes les combinaisons de costume et de valeur, et l'indexation dans la liste résultante avec l'entrée.
la source
F #,
174168 octetsSuppression de certains espaces supplémentaires, comme l'a noté Manish Kundu. Merci!
Essayez-le en ligne!
Je vais être honnête - je suis nouveau au code golf, donc je ne sais pas s'il est plus approprié de répondre avec une fonction pure comme celle-ci (avec des paramètres, mais pas d'E / S) ou avec un bloc de code fonctionnel avec l'utilisateur E / S.
la source
Octave ,
155153151150 octetsEssayez-le en ligne!
Cela crée une chaîne commençant par
' of '
et's'
, puis toutes les combinaisons suivies de tous les rangs. Cette chaîne est séparée par des virgules en chaînes distinctes. Les combinaisons sont avant les rangs, car cela permet d'économiser un octet lors de la création des indices. Après cela, nous l'indexons en utilisant des crochets avec les indices suivants:qui est le rang, suivi du premier élément
' of '
, suivi du costume, suivi de's'
.Le fait
's'
de faire partie des costumes (hearts,diamonds,spades,clubs
) au lieu d'une chaîne distincte est exactement de la même longueur mais moins amusant.Le fractionnement sur le séparateur par défaut
économiserait 4 octets dans l'
strsplit
appel, mais les espaces autour' of '
seraient supprimés et devraient être ajoutés manuellement, ce qui coûterait plus d'octets.la source
V ,
154147144142 142 octets-7 octets grâce à DJMcMayhem
Essayez-le en ligne!
Hexdump:
la source
« == \+
2)12dj == 13D
ò
? J'ai essayé à laò13j0Pò
place de4ñ13j0Pñ
, mais cela n'a pas pris finP
ajout de nouvelles lignes? De plus, êtes-vous sûr d'avoir besoin0
de cette partie? Il me semble que cela fonctionnerait probablement sans0
c'est inutileC # ,
219207202197 octets (0 indexé)grâce aux contributions de @Ciaran_McCarthy et @raznagul
Prend une entrée de int I, soustrait 1 pour correspondre à l'indexation 0 du tableau de chaînes et sort le nombre basé sur I mod 13 et la combinaison basée sur i / 14 + 13.
fonctionne assez bien pour mon deuxième code de golf, je me demande simplement si je pourrais le raccourcir en utilisant LINQ ou autre chose.
la source
i++
pouvoir la supprimer complètement. En convertissant la fonction en lambda, je l'ai réduite à 178 octets .using
déclaration. Quoi qu'il en soit +1 de moi."of"
dans le tableau.PowerShell ,
207192182174165163161157 octets0 indexé
Essayez-le en ligne!
4 octets économisés grâce à AdmBorkBork dans les commentaires
la source
-split
sur les espaces pour économiser 6 octets-split'two three four five six seven eight nine ten jack queen king ace'
et un autre octet en utilisant le remplacement en ligne au lieu du plancher$_/13-replace'\..*'
CJam , 114 octets
Essayez-le en ligne!
Zéro indexé. Sera probablement battu par les langues avec compression de dictionnaire, mais bon ...
la source
Gelée , 61 octets
0 indexation. Essayez-le en ligne!
la source
“...“...»Ḳ€¤Œpị@j“ of
est probablement plus court.Julia 0,6 , 156 octets
Essayez-le en ligne!
-2 octets grâce à @Stewie Griffin
la source
Haskell , 144 octets
Essayez-le en ligne!
Cela frappe toutes sortes de points douloureux de Haskell.
la source
SOGL V0.12 , 53 octets
Essayez-le ici!
la source
Javascript
149143140 octets-3 bits grâce à @rick hitchcock
la source
[_/13|0]
. Par exemple:["hearts","diamonds","spades","clubs"][_/13|0]
a=
car votre fonction n'est pas récursive.Perl 5
-p
, 119 octetsBasé sur 0
Essayez-le en ligne!
la source
Japt ,
9186 octets0 indexé.
J'ai utilisé un outil écrit par @Shaggy pour générer les listes compressées.
Essayez-le en ligne!
Explication:
La première chaîne compressée contient les valeurs de carte délimitées par
d
. La deuxième chaîne compressée contient les rangs de carte délimités park
.Ces caractères ont été choisis à l'aide de l'outil de Shaggy, qui génère une chaîne délimitée par un caractère qui est compressé de manière optimale à l'aide de shoco (la compression que Japt utilise). Cela nous permet de créer une liste de valeurs et de classements de cartes.
Nous utilisons des raccourcis
`
pour décompresser ces chaînes, puis nous divisons la chaîne à l'aideq
, suivi du caractère pour effectuer la décomposition.Une fois que nous avons les listes, nous cartographions les valeurs de la carte, puis nous obtenons l'index de l'entrée. Il est important de noter que Japt encapsule ses index, nous n'avons donc pas à modulo par 13.
À chaque élément, nous parcourons les rangs des cartes. Nous obtenons l'indice en divisant l'entrée par 13.
Une fois que nous avons les deux éléments, nous les concaténons avec
" of "
, ce qui produit la chaîne finale.la source
Gelée ,
5855 octetsEssayez-le en ligne!
la source