Dice Cricket est un jeu auquel j'ai été initié enfant et que j'ai utilisé pour passer du temps depuis des années. Je n'ai pas trouvé de page Wikipédia, je vais donc expliquer les règles ci-dessous.
Dice Cricket Rules
Prémisse
Dice Cricket est un jeu similaire à marquer un jeu de cricket pendant que vous le regardez, mais plutôt que de regarder et d'enregistrer le résultat, vous lancez un dé et enregistrez le résultat.
Les résultats sont enregistrés dans un tableau comme indiqué en bas.
Afficher
Dice Cricket utilise un écran spécifique pour afficher toutes les informations qui se produisent.
Le tableau comporte 11 lignes. Chaque rangée représente un frappeur. La disposition de la ligne est expliquée ci-dessous.
+------+------------------------------+---------+-----+
| Name | Runs | How Out |Score|
+------+------------------------------+---------+-----+
- Nom: Le nom doit être une chaîne entièrement composée de lettres, majuscules ou minuscules
- Pistes: Un frappeur peut faire face à 30 balles. Chaque balle peut être l'une des
1 2 4 6 . /
. Ceci sera expliqué plus en détail ci-dessous - Comment sortir: La façon dont le frappeur était sorti. Peut être n'importe lequel
Bowled, LBW (Leg Before Wicket), Caught, Retired or Not Out
- Score: la somme de tous les nombres
Runs
Comment fonctionne le jeu
Dans un jeu, il y a toujours 2 frappeurs sur le terrain. Le premier joueur est par défaut le batteur actuel et le second dans le batteur "off".
Un jeu est composé de "balles": chaque balle d'un match de cricket est représentée par un lancer de dés. Chaque rouleau fait une commande différente:
- 1,2,4 et 6 font que le frappeur marque autant. Si 1 est lancé, le batteur actuel devient le batteur "off" et le batteur "off" devient le batteur actuel
- 3 est une "boule de points", ce qui signifie que rien ne se passe. Il est représenté dans la
Runs
section sous la forme a.
et obtient 0. A0
ne peut pas être utilisé pour le représenter. - 5 est un guichet. Si 5 est lancé, le frappeur actuel est "retiré". Cela signifie qu'un a
/
est ajouté aux points et à partir de ce moment, le frappeur ne peut plus marquer de points. Le frappeur est ensuite échangé avec le frappeur suivant qui n'a pas frappé. LaHow Out
section est un choix aléatoire des moyens possibles de sortir:Bowled, LBW, Caught
Exemple pour un guichet (c'est juste pour plus de clarté, ce n'est pas comme ça que ça sort)
player a is on 4,6,2,6,4
player b is on 6,4,2,6,6
player c hasn't batted
player a is current batter
WICKET!!!
player a is on 4,6,2,6,4,/
player b in on 6,4,2,6,6
player c is on NOTHING
player c is current batter
Toutes les 6 balles, les deux frappeurs changent; le frappeur actuel devient le frappeur «off» et le frappeur «off» devient le frappeur actuel
Si la Runs
section est remplie (30 balles), le frappeur est retiré et la How Out
section est réglée sur Retired
. Un /
n'est pas placé à la fin de la Runs
boîte.
Défi réel (oui, c'était toutes les règles du jeu)
Votre défi est de produire un tableau complet (comme l'exemple à la fin), avec une liste de noms. Le contenu de la sortie ne doit contenir que la table et / ou les espaces de début ou de fin.
Règles
- Les failles standard sont interdites
- Les 11 joueurs devraient avoir quelque chose dans la
Runs
section. - Un seul joueur peut l'être
Not Out
. Tout autre joueur non retraité ne devrait pas avoir le choix[Bowled, LBW, Caught]
- Les noms peuvent avoir une longueur comprise entre 1 et 6 qui correspond à l'expression régulière
A-Za-z
- La dernière ligne du tableau doit être la ligne totale (voir l'exemple)
- Il n'est pas nécessaire d'aligner le texte du tableau de quelque manière que ce soit, mais les séparateurs de lignes et de colonnes doivent être alignés.
Exemple
Input:
['Fred', 'Sonya', 'David', 'Ben', 'Cody', 'Hazel', 'Nina', 'Kim', 'Cath', 'Lena', 'Will']
Output:
+------+------------------------------+---------+-----+
| Name | Runs | How Out |Total|
+------+------------------------------+---------+-----+
|Fred |.662/ | Caught | 14 |
+------+------------------------------+---------+-----+
|Sonya |1164/ | Caught | 12 |
+------+------------------------------+---------+-----+
|David |/ | LBW | 0 |
+------+------------------------------+---------+-----+
|Ben |424/ | LBW | 10 |
+------+------------------------------+---------+-----+
|Cody |62/ | Bowled | 8 |
+------+------------------------------+---------+-----+
|Hazel |/ | LBW | 0 |
+------+------------------------------+---------+-----+
|Nina |161.6226166..44261442/ | Caught | 64 |
+------+------------------------------+---------+-----+
|Kim |11/ | Caught | 2 |
+------+------------------------------+---------+-----+
|Cath |6.21/ | LBW | 9 |
+------+------------------------------+---------+-----+
|Lena |/ | Bowled | 0 |
+------+------------------------------+---------+-----+
|Will |2 | Not Out | 2 |
+------+------------------------------+---------+-----+
| Total Runs | 121 |
+-----------------------------------------------+-----+
Réponses:
Python 3 ,
650621582572588 octetsEssayez-le en ligne!
Eh bien, cela fait plus de 24 heures et cela m'a pris environ une heure pour préparer, donc j'espère que je ne FGITW'ing personne, et je n'ai pas joué au golf en Python depuis un moment, donc c'était amusant (bien que ce soit la deuxième fois que j'ai répondu à une de mes propres questions avec une longue réponse Python)
N'hésitez pas à publier des suggestions de golf, Python n'est pas ma meilleure langue pour jouer au golf.
-68 octets grâce à FlipTack !
-8 octets grâce à M. Xcoder
+16 octets en raison d'un bug
la source
print
au lieu deP
. 2)sum
peut directement prendre unmap
objet, pas besoin de le convertir en liste. 3) Plutôt que d'écrireyield x
deux fois, pourquoi pasyield x
et ensuite casser si nécessaire? 4)T=0
pourrait être placé à l'intérieur de l'en-tête de fonction. 5) Dans votre dernière fonction, vous avez utilisé plusieurs sauts de ligne où vous pouvez simplement utiliser une ligne avec des points-virgules, par exemple les trois premières instructions, les trois dernières instructions et les instructions de la boucle for.s
considérablement ...def s(i=30):
et ensuitewhile i:x=choice('12.4/6');yield x;i=('/'!=x)*~-i
. De plus, vous n'appelezo()
qu'une seule fois, il n'est donc même pas nécessaire de le déclarer, utilisez simplement l'instruction directement.b
^^Charbon de bois ,
277255 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Lisez les 11 noms (l'entrée est flexible: JSON, séparés par des espaces ou séparés par une nouvelle ligne) et créez un tableau
q
de 11 frappeurs, représentés par leurs boules (sous forme de tableau), leur statut (sous forme d'entier) et leur nom.Créez une copie inversée des frappeurs
h
. Cela représente les frappeurs qui ne sont pas sortis. Les deux derniers éléments sont les frappeurs off et actuels.Répétez pendant qu'il y a au moins deux frappeurs disponibles.
Extraire la pâte actuelle à
i
.Générez une balle au hasard
z
.Ajoutez-le à la liste globale des balles en utilisant la liste vide prédéfinie
u
.Ajoutez-le aux balles du frappeur actuel.
Si la balle est un
/
, alors générez un statut aléatoire2..4
, sinon s'il s'agit de la 30ème balle du frappeur, définissez le statut1
autrement0
.Si le frappeur est retiré, enregistrez son statut, sinon remettez-le au bâton.
S'il reste au moins deux frappeurs et que le frappeur était absent xou 6 balles ont été jouées, alors ...
... enlevez les frappeurs off et actuels et les remettre dans l'ordre inverse.
Imprimez l'en-tête.
Faites une boucle sur les frappeurs.
Imprimez le nom du frappeur.
Imprimez les boules du frappeur.
Imprimez le statut du frappeur en l'indexant dans la chaîne
Not OutRetiredBowled Caught LBW
divisée en sous-chaînes de longueur 7.Imprimez le score du frappeur.
Passez au début de la ligne suivante, sauf une.
Imprimez le total.
Dessinez des boîtes autour de tout.
la source