Le jeu de Sevens se joue comme suit: les n
joueurs s'assoient en cercle, et commencent à compter à partir de 1, en passant à gauche (ou de joueur A
à joueur B
).
Lorsqu'un nombre p
qui contient un 7
OU est divisible par 7
est atteint, alors le joueur qui a prononcé le nombre p-1
, après que le joueur suivant a dit p
, doit dire p+1
et l'ordre des personnes qui parlent s'inverse. Par exemple, si le joueur B
parle 6
, le joueur C
dit 7
, B
dit 8
et le joueur A
dit 9
.
Remarque: Pour ceux qui veulent jouer dans la vraie vie, si une personne oublie un numéro (ou dans la version où sevens
ne sont pas dit, dit accidentellement seven
), ils sont éliminés du cercle, mais nous allons omettre ce détail de ce défi.
Le défi lui-même est d'imprimer les nombres que chaque joueur devrait dire dans un jeu parfait de Sevens jusqu'à une entrée m
pour une entrée des n
joueurs.
À titre d'exemple, où cinq personnes, A
, B
, C
, D
et E
, sont appelés à jouer jusqu'à ce qu'ils atteignent30
. Ils jouent de cette manière
A: 1 6 8 13 15 19 23 30
B: 2 7* 12 16 18 24
C: 3 11 17* 25
D: 4 10 21* 26 28*
E: 5 9 14* 20 22 27*29
où sevens
sont marqués *
. Notez que à 27
et 28
, nous inversons deux fois, et le jeu continue "comme d'habitude" de D
à E
.
Veuillez noter que la sortie ne doit pas nécessairement être au format ci-dessus. Je l'ai simplement imprimé de cette façon pour plus de clarté.
Règles
L'entrée est deux entiers dans n'importe quel ordre,
m
représentant le dernier nombre à dire,n
représentant le nombre de joueurs.La sortie peut être plusieurs tableaux ou plusieurs chaînes, une pour chaque joueur. Si vous utilisez des chaînes, vous n'avez pas besoin d'utiliser de séparateurs (cependant, si vous pouviez en ajouter dans vos tests de code, nous apprécierions la lisibilité). Si vous pouvez les imprimer dans un cercle d'une manière ou d'une autre, cela est également acceptable, et ce serait plutôt cool aussi.
La sortie n'a pas à désigner quels joueurs sont lesquels (il est assez évident que le premier joueur est celui qui dit
1
), bien que si la sortie n'est pas triée pour une raison quelconque, vous devez préciser quel joueur parle quel ensemble de nombres . L'omission de joueurs qui ne disent rien est également autorisée si vous précisez quels joueurs parlent. J'ajouterai plus d'exemples de sorties possibles ci-dessous.C'est le golf de code, donc le plus petit nombre d'octets gagne.
Comme toujours, si le problème n'est pas clair, faites-le moi savoir. Bonne chance et bon golf!
Exemples
>>> sevens_string(30, 5, " ")
'1 6 8 13 15 19 23 30'
'2 7 12 16 18 24'
'3 11 17 25'
'4 10 21 26 28'
'5 9 14 20 22 27 29'
>>> sevens_string(42, 5)
'16813151923303539'
'27121618243140'
'31117253241'
'410212628333742'
'591420222729343638'
>>> sevens_array(20, 3)
[1, 4, 7, 10, 13, 15, 19]
[2, 5, 9, 12, 16, 18]
[3, 6, 8, 11, 14, 17, 20]
>>> sevens_array(18, 10)
[1, 13, 15]
[2, 12, 16, 18]
[3, 11, 17]
[4, 10]
[5, 9]
[6, 8]
[7]
[]
[]
[14]
1 2 3 4 1 2 3 2 1 4 3 2 1 4 1
.) Je ne dis pas que c'est mieux ou pire en termes de défi: juste que ce serait plus utile dans le monde réel.Réponses:
Pyth, 38 octets
Essayez-le en ligne. Suite de tests.
Fondamentalement, un port de ma réponse Python; il y a probablement une meilleure façon. Prend en entrée le nombre à compter
n
et le nombre de joueursp
sur des lignes distinctes, produit le résultat sous forme de tableau à deux dimensions.la source
Haskell, 151 octets
la source
mod n 7<1
lieu demod n 7==0
et aus<$>[1..]
lieu demap s[1..]
? Et pourquoi pas à laprint[]
place demapM_ print[]
?Python 3, 155 octets
Utilise des graphiques de tortues pour imprimer dans un cercle de telle sorte que les nombres prononcés par le même joueur soient dans le même rayon. Le rayon du cercle est augmenté lorsque la direction est inversée ou lorsque la séquence s'enroule autour du cercle, de sorte que les numéros précédents ne sont pas remplacés.
Exemple de sortie pour
f(22,6)
la source
Python 2,
103102101 101 octetsDéfinit une fonction
S(n,p)
qui prend le nombre à comptern
et le nombre de joueursp
et imprime le résultat sous la forme d'un tableau de chaînes.la source
Python 2,
919087 octetsImprime une liste de tuples. Testez-le sur Ideone .
la source
Gelée ,
2725 octets (non concurrent)Essayez-le en ligne! ou vérifiez tous les cas de test .
la source
Dyalog APL,
504735 octetsCela affiche les nombres que chaque joueur a dit sous forme de tableau, où la première colonne énumère les joueurs. Les lignes sont remplies de 0 s à la même longueur et les lignes sans chiffres sont omises.
Vérification
Notez que, dans le dernier exemple, 7 et 8 sont omis car ces joueurs n'ont encore rien dit.
la source
Rubis, 81
Implémentation assez simple. Renvoie une chaîne glommed laide (vous pouvez ajouter un espace pour le faire
"#{k+=1} "
pour ... eh bien, une chaîne espacée). Je me demande s'il y a un algorithme plus mathématique.la source
Facteur 172
J'ai réussi à le faire plus longtemps que Haskell, et aussi lisible qu'APL! Est-ce que je reçois un cookie?
C'est une citation (fonction anonyme) qui produit une séquence circulaire de vecteurs. Chaque vecteur commence par le nombre de joueurs, puis les nombres qui correspondent à ce joueur.
J'ai commencé avec ceci:
ce qui n'est pas un bon code factoriel, mais beaucoup plus clair (oui, j'utilise des nombres comme noms de variables là-bas, ne me regardez pas comme ça!).
la source
SYMBOL:
mieux le problème de la longueur : les noms à une lettre, et se débarrasser deset
etget
!JavaScript (ES6) 100
Retour du résultat sous forme de tableau de chaînes, pas de séparateurs
Ou plus lisible, pour 3 octets de plus, renvoyant le résultat sous forme de tableau de tableaux
Test à l' aide de la nouvelle fonctionnalité de console merveilleuse des extraits de pile
la source
J,
6360595856 octetsVérification
la source