Ce soir, c'est la nuit du jeu de cartes! Vous êtes le croupier et votre tâche est d'écrire un programme pour distribuer les cartes aux joueurs.
Étant donné un tableau de cartes et le nombre de joueurs, vous devez diviser le tableau de cartes en une main pour chaque joueur.
Règles
Votre programme recevra un tableau non vide A
, ainsi qu'un entier positif non nul n
. Le tableau doit ensuite être divisé en n
mains. Si la longueur de la chaîne n'est pas divisible par n
les restes, les cartes à la fin doivent être réparties aussi uniformément que possible.
- Si
n==1
, vous devrez retourner un tableau de tableau avecA
comme seul élément Si
n
est supérieur à la longueur deA
, vous devrez retourner chaque main et une main vide. sin = 4
etarray A = [1,2,3]
, vous devez retourner[[1],[2],[3]]
ou[[1],[2],[3],[]]
. Vous êtes libre de gérer la main vide avec vide, indéfini ou nul.Le tableau peut contenir n'importe quel type plutôt qu'un nombre.
Vous ne devez pas modifier l'ordre du tableau pendant le traitement. Par exemple,
if n = 2
etA= [1,2,3]
, tout résultat plutôt que[[1,3],[2]]
sera invalide.
Cas de test
n A Output
1 [1,2,3,4,5,6] [[1,2,3,4,5,6]]
2 [1,2,3,4,5,6] [[1,3,5],[2,4,6]]
3 [1,2,3,4,5,6] [[1,4],[2,5],[3,6]]
4 [1,2,3,4,5,6] [[1,5],[2,6],[3],[4]]
7 [1,2,3,4,5,6] [[1],[2],[3],[4],[5],[6]] // or [[1],[2],[3],[4],[5],[6],[]]
Programme de démonstration
def deal(cards, n):
i = 0
players = [[] for _ in range(n)]
for card in cards:
players[i % n].append(card)
i += 1
return players
hands = deal([1,2,3,4,5,6], 2)
print(hands)
Il s'agit de code-golf , donc vous serez le gagnant des octets les plus courts de chaque langue.
Inspiré de Create chunks from array par chau giang
la source
0
?Réponses:
05AB1E ,
31 octetEnregistré 2 octets grâce à Adnan
Essayez-le en ligne! ou comme suite de tests
Explication
Fait exactement ce que le défi demande
la source
ι
n=7
, mais c'est un format de sortie acceptable. J'ai totalement raté cette fonction intégrée: /R ,
4625 octetsEssayez-le en ligne!
split
sA
en groupes définis par1:n
, en recyclant1:n
jusqu'à ce qu'il corresponde à la longueurA
.la source
Perl 6 ,
3324 octetsEssayez-le en ligne!
Bloc de code curry anonyme qui prend un nombre et renvoie un lambda Whats qui prend une liste et retourne une liste de listes. Cela prend la deuxième option quand on lui donne un nombre supérieur à la longueur des listes, par exemple les
f(4)([1,2,3])
retours[[1],[2],[3]]
Explication:
la source
Wolfram Language (Mathematica) , 28 octets
Essayez-le en ligne!
la source
Japt, 2 octets
Prend le tableau comme première entrée.
Essayez-le
la source
Python 2 , 37 octets
Code:
Essayez-le en ligne!
la source
Gelée ,
62 octetsEssayez-le en ligne!
Merci à @JonathanAllan d'avoir économisé 4 octets
la source
sZ
ne marche pas?J ,
13,11,10, 9 octetsEssayez-le en ligne!
comment (explication précédente, fondamentalement la même)
la source
Fusain , 9 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend l'entrée dans l'ordre
[n, A]
et sort chaque valeur sur sa propre ligne et chaque main à double interligne de la précédente. Explication:la source
Haskell , 39 octets
Remarque:
Data.Lists
provient des listes de bibliothèques tierces , qui ne sont pas sur Stackage et n'apparaîtront donc pas sur Hoogle.la source
Data.Lists
ne semble pas exister. Je suppose que vous vouliez direData.List
, mais il ne contient paschunksOf
.chunksOf
semble seulement apparaître avec la signatureInt -> Text -> [Text]
. 1lists
package.split
package et réexporté par lelists
package. Il existe des versions dechunksOf
pour les listes, le texte, les séquences et probablement d'autres choses.Kotlin ,
535149 octetsL'ancienne solution incorrecte ne fonctionnait que pour les diviseurs de la longueur du tableau. Je suis certain que cela peut être minimisé.
Essayez-le en ligne!
la source
n
n'est pas un diviseur de la longueur de la listeJavaScript (Node.js) , 51 octets
Essayez-le en ligne!
JavaScript (Node.js) , 53 octets
Essayez-le en ligne!
la source
APL + WIN 26 ou 31 octets
Si des mains individuelles peuvent être représentées comme des colonnes d'une matrice 2D, 26 octets si un tableau de tableaux ajoute 5 octets.
Essayez-le en ligne! gracieuseté de Dyalog Classic
ou
Essayez-le en ligne! Gracieuseté de Dyalog Classic
Explication:
une invite ← ⎕ pour le tableau de cartes
((l ← ⌈ (⍴a) ÷ n) × n ← ⎕) ↑ invite pour un entier, remplissez a avec des zéros pour donner des mains paires
(l, n) ⍴ créer une matrice 2D avec chaque colonne représentant chaque main
⊂ [1] si nécessaire, convertir en vecteur imbriqué - tableau APL de tableaux
la source
TSQL, 44 octets
Essaye le
la source
MathGolf , 9 octets
Essayez-le en ligne!
Explication
la source
Java (JDK) , 90 octets
Essayez-le en ligne!
Merci Olivier Grégoire pour la lambda et pour une meilleure incrémentation lors de l'itération.
la source
Rubis, 81 octets
Essayez-le en ligne
la source
each_with_index
est assez cher par rapport à un compteur d'incrémentation, faitmap{[]}
essentiellement la même chose que votremap(&:dup)
astuce, Proc anonyme, etc. qui peut réduire votre code à 59 octets. Essayez-le en ligne! Consultez également la page des conseils RubyPHP ,
858382 octetsEssayez-le en ligne!
Ce ne sera pas l'entrée la plus courte, mais j'ai pensé que ce serait amusant d'essayer de le faire en utilisant les fonctions intégrées des fonctions de tableau PHP. Résultat: long.
Production
la source
print_flat
vous, vous pouvez simplement faire dujson_encode
bac à sable - ne change pas vraiment la réponse, pensais que je le mentionnerais, bravo!Wolfram Language (Mathematica) , 25 octets
Essayez-le en ligne!
la source
;; ;;
n'est qu'une tranche, à peu près équivalente à celle de python: :
; cela obtient des tranches de chaque;;
pas;
lol. regardait ce qui se passe "wth isi ; ; ; ; #
"C # (Visual C # Interactive Compiler) , 43 octets
Essayez-le en ligne!
la source
[1,2,3], 4
devrait sortir[[1],[2],[3]]
. Vous distribuez 3 cartes à 4 joueurs. Je mettrai à jour la question principale.C (gcc), 5 octets
L'indicateur du compilateur
-Df=
(espace principal requis) remplit la spécification.f(n_cards,n_hands,card_ptr)
évalue un pointeur sur une liste de mains.Explication
En C, il est courant d'implémenter des listes de listes comme un seul tableau entrelacé, lorsque le nombre de listes reste constant mais que toutes les listes peuvent être étendues. Par exemple, dans ce cas de distribution de cartes, il est plus courant d'ajouter plus de cartes à chaque main que plus de mains à ajouter, il serait donc raisonnable d'implémenter une liste de mains en tant que liste entrelacée. Par coïncidence, le "deck" est une telle liste, et donc nous renvoyons le paramètre sans modification.
Ce défi aurait probablement dû être mis en bac à sable.
la source
Perl 5
-la
,6656 octetsEssayez-le en ligne!
la source