Aux fins de cette question, un jeu de cartes est formaté de la manière suivante:
[
"AS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JS", "QS", "KS",
"AD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JD", "QD", "KD",
"AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JH", "QH", "KH",
"AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JC", "QC", "KC",
"J", "J"
]
Les cartes sont toujours formatées en valeur, suivies de combinaisons. Par exemple, AS
c'est l'as de pique. Les deux simples J sont des Jokers. Nous voulons mélanger ce jeu de cartes, mais le mélange doit être Superb ™.
Un Superb Shuffle ™ est celui dans lequel:
- Il n'y a pas deux cartes (sauf Jokers) de la même couleur adjacentes.
- Aucune carte (sauf Jokers) n'est adjacente à une de la même valeur.
- Aucune carte (sauf Jokers) n'est adjacente à une valeur adjacente (une supérieure ou une inférieure dans cet ordre, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A. Notez que l'as ne peut pas être adjacent à un 2 ou à un roi).
- Les Jokers peuvent être dans n'importe quelle position.
- La définition d'un Superb Shuffle ™ n'exige pas que les cartes soient dans un ordre différent chaque fois qu'elles sont mélangées. Ce qui n'est pas très beau, mais c'est Superb ™.
Parce que c'est Superb ™.
Un exemple pourrait être:
[
"AS", "5D", "9H", "KC", "2D", "6H", "10C", "QS", "3H", "7C", "9S",
"KD", "4C", "6S", "10D", "AC", "3S", "7D", "JH", "J", "4D", "8H",
"QC", "AD", "5H", "9C", "JS", "2H", "6C", "8S", "QD", "3C", "5S",
"9D", "KH", "2S", "6D", "10H", "J", "3D", "7H", "JC", "KS", "4H",
"8C", "10S", "AH", "5C", "7S", "JD", "2C", "4S", "8D", "QH"
]
Le défi:
- Écrivez du code pour exécuter un superbe shuffle
- Utilisez n'importe quelle langue.
- L'entrée peut être soit :
- un jeu de cartes tel que décrit ci-dessus dans le même ordre , comme un tableau ou une autre structure de liste.
- Aucune entrée (le code génère un jeu de cartes dans cet ordre)
- La sortie doit être un jeu de cartes complet dans un Superb Shuffle ™ comme décrit ci-dessus.
- Essayez d'exécuter votre Superb Shuffle ™ dans le plus petit nombre d'octets.
- Un lien vers un interprète en ligne tel que Try It Online est préférable, mais facultatif.
Mélange heureux!
T
au lieu de10
?Réponses:
Japt,
654 octetsDivise le tableau d'entrée en sous-tableaux de chaque 16e élément et aplatit.
Essayez-le
la source
Rubis , 31 octets
Essayez-le en ligne!
Explication:
Je prends une carte, puis je saute les 16 suivantes et je commence à partir de la première carte lorsque j'atteins la dernière carte du jeu. 17 et 54 sont mutuellement premiers, donc je suis sûr de choisir toutes les cartes.
La 17e position est garantie d'être une couleur différente et la différence de valeur est d'au moins 2: la 13e (ou 15e) carte a la même valeur et une couleur différente, donc en sautant les 4 autres (ou 2), la valeur est correcte .
la source
Python 3 , 21 octets
Essayez-le en ligne!
Explication:
La même idée que ma réponse Ruby, mais encore plus courte en Python: j'utilise 17 paquets, et je choisis toutes les 17 cartes.
la source
JavaScript, 35 octets
Essayez-le en ligne!
Prendre un tableau de deck en entrée et remplacer chaque valeur impaire par une autre carte distante de "20 cartes" sur le deck.
la source
Java 10,
7265 octetsSimilaire à la réponse Ruby de @GB , mais en utilisant
i*7%54
sur le tableau de résultats, plutôt quei*17%54
sur le tableau d'entrée pour enregistrer un octet.Essayez-le en ligne.
Explication:
la source
AS, 6S, JS, 3D, 8D, KD,
.Perl 6 ,
21 2018 octetsMerci à Brad Gilbert b2gills pour -2 octets
Essayez-le en ligne!
Encore un autre port de la réponse de GB .
Notez que, bien que la variable globale neCependant,$!
soit pas réinitialisée entre les fonctions, la valeur n'a pas d'importance, car tout ordre de sortie est valide.$
est réinitialisé.Explication:
la source
$
nom qu'avec$!
ou$/
. De plus, si vous l'avez utilisé à la$_
place,@_
vous pouvez le démarrer au.[…]
lieu d'@_[…]
enregistrer un autre octet.05AB1E ,
975 octetsPort de la réponse Ruby de @GB , alors assurez-vous de lui donner un vote positif!
-2 octets en imprimant chaque carte avec un délimiteur de nouvelle ligne au lieu de l'envelopper dans une liste de résultats
-2 octets grâce à @ Mr.Xcoder
Essayez-le en ligne.
Explication:
la source
ā17*è
devrait économiser 2 octets supplémentairesJavaScript, 27
Un autre basé sur la réponse rubis
Édité dans un raccourcissement évident
la source
T-SQL, 31 octets
Si vous ne vous souciez pas d'une colonne supplémentaire dans la sortie, je peux la réduire à 29 octets :
Vous pouvez donc vérifier que ma sortie est "Superbe", voici le deck qu'elle produit:
(Généré à l'aide du nouvel ajout SQL 2017,
STRING_AGG
):La partie difficile pour moi n'était pas le code de sélection, il remplissait la table d'entrée (ce qui est autorisé pour SQL selon nos règles d'E / S ).
Parce que SQL est intrinsèquement non ordonné (il ne garantit un certain ordre que si vous incluez une
ORDER BY
clause explicite ), j'ai dû inclure cet ordre d'origine en tant que champ i dans la table d'entrée t . Cela signifie également que je peux l'utiliser pour trier, en utilisant le même processus facteur / mod "relativement premier" que tout le monde utilise. J'ai trouvé que celai*7%54
fonctionnait aussi bien quei*17%54
.Voici les commandes pour configurer et remplir la table d'entrée t , en fonction de ma solution à cette question connexe :
la source
i
pas considéré comme un apport supplémentaire ici?Gelée ,
54 octetsEssayez-le en ligne!
Il s'avère que
tout le monde,tout le monde, sauf le gars aléatoire, il enregistre un octet :(crédit à Go pour leur méthode .
La façon dont je suis allé ...
Essayez-le en ligne!
Comment?
Fixez toutes les autres cartes et intercalez-les avec une rotation du jeu de 20 places (18 et 22 places fonctionnent également; en outre, les deux sens de rotation ainsi que la fixation des cartes impaires ou paires)
C'est-à-dire (en utilisant
T
pour10
etrj
&bj
pour lesJ
s):la source
PowerShell 3.0,
3026 octets-4 grâce à Mazzy
Ancien code à 30 octets
Un autre port de la méthode de GB.
la source
$args[(0..53|%{$_*17%54})]
.The input can be either:... in the same order, as *an array*
.$args
est un tableau. et vous pouvez utiliser une éclaboussure . par exemple$a=@("AS", ..., "J"); &{} @a
. Essayez-le. :)&{
et}
. Vous pouvez enregistrerparam($d)0..53|%{$d[$_*17%54]}
dans un fichier. et appeler ce fichier sans&{...}
Fusain , 8 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Un autre port de la réponse Ruby de @ GB. Explication:
la source
Rouge , 44 octets
Essayez-le en ligne!
Une autre interprétation du code de GB. J'ajoute 16 copies du jeu à lui-même, puis j'extrais chaque 17e carte.
la source