Objectif
Écrivez un programme ou une fonction qui prend un entier positif n
et génère aléatoirement une série légale de pas (désormais appelée chaîne de pas) de longueur n
.
Contribution
Un entier positif non nul n
<= 100
Production
Renvoie une chaîne aléatoire ou une liste de caractères qui représentent une chaîne de longueur de pas valide et possible n
. Les caractères utilisés seront:
- B - Balle. Si vous en accumulez 4, le frappeur est promené et a terminé le bâton.
- S - Strike. Si vous en accumulez 3, le frappeur est retiré et a terminé le bâton.
- F - Faute. Augmentera également le nombre de frappes mais ne pourra pas retirer le frappeur. C'est à dire, vous ne pouvez pas avoir un Foul être le dernier pitch d'une chaîne valide. Toute faute au-delà de deux frappes / fautes n'augmentera pas le nombre de frappes (le frappeur a déjà 2 frappes à ce moment-là et une troisième le ferait sortir).
- H - Frappé. Le frappeur a frappé une balle en jeu et a terminé le bâton.
(Ceci est légèrement simplifié, mais ne vous inquiétez pas à ce sujet)
Les chaînes de pitch valides sont celles qui se terminent par un retrait, une marche ou un coup.
Autrement dit, une chaîne de hauteur non valide a soit
- lancers supplémentaires après la 4e balle, la 3e frappe ou la frappe
- terminé avant de générer une 4e balle, une 3e frappe ou un coup.
Règles
- Votre programme doit être capable de produire tous les résultats possibles pour une entrée donnée.
- Votre programme ne doit pas être uniformément aléatoire mais doit toujours suivre la règle précédente.
- C'est du code-golf .
Exemples
Input => Possible Outputs
1 => [H] #Can only end with a hit
2 => [S,H], [B,H], [F,H] #Can only end with a hit
3 => [S,S,S], [F,F,S], [B,B,H], ... #Can now strike-out, otherwise must end with a hit
4 => [B,B,B,B], [S,B,S,S], [B,F,S,S], [B,B,B,H], ... #Can now be walked, struck-out, or get a hit
6 => [S,B,S,B,B,H], [F,F,F,F,F,S], ... #Can now have a full-count (3 balls, 2 strikes) before finishing
Input => Invalid Outputs
1 => [S], [B] #Not enough for a strike-out/walk
2 => [S,S] #Not enough for a strike-out/walk
2 => [H,H] #Batter has already scored a hit
3 => [S,S,F] #Fouls will not cause a strike-out
4 => [S,S,S,H] #Batter has already struck out
5 => [B,B,B,B,B] #Batter has already walked
F
s et aS
est une grèveRéponses:
Python 2 , 128 octets
Essayez-le en ligne!
Générez aléatoirement la chaîne de pitch jusqu'à ce que le batteur soit fait, sortez-la si elle s'avère avoir la bonne longueur, et sinon essayez à nouveau à partir de zéro.
Python 2 , 136 octets
Essayez-le en ligne!
la source
n=8
peut générer une chaîne deF
s à la finS/3
pour le(S>2)
corriger.05AB1E ,
445044 octetsBiffé
44
n'a plus 44 ans :)Port de la réponse Python 2 de @xnor , alors assurez-vous de lui aussi voter positivement si vous aimez cette réponse!
+6 octets en raison d'une correction de bogue, et après cela -6 octets encore grâce à @xnor en portant son correctif plus efficace par rapport à ma solution temporaire, comme je m'y attendais. ;)
Essayez-le en ligne ou vérifiez d'autres sorties aléatoires .
Explication:
la source
X/3
àX>2
.R , 148 octets
Essayez-le en ligne!
Génère la chaîne, en utilisant l'inclusion conditionnelle dans les jeux de données d'échantillonnage pour garantir que le résultat est une séquence de pas possible.
Il est possible que l'échantillonnage de rejet (comme le fait la réponse en python de xnor ) soit plus court.
Référence aléatoire "F et S" qui continuait à jouer dans ma tête chaque fois que je tapais une de ces lettres ...
la source
JavaScript (SpiderMonkey) , 137 octets
Essayez-le en ligne!
la source
Pyth, 53 octets
Essayez-le en ligne ici .
Cela semble beaucoup trop long, je pense qu'une autre approche peut être nécessaire.
la source
JavaScript (ES6),
107 10699 octetsEssayez-le en ligne!
Commenté
la source
Encre ,
120119116117 octetsEssayez-le en ligne!
Probablement encore jouable au golf.
Non golfé (légèrement reformaté)
Modifications
->->
au lieu de->END
.n
plus tôt.la source
APL (Dyalog Unicode) , 77 octets SBCS
Essayez-le en ligne!
la source
Fusain , 57 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Commencez avec 0 balles et 0 frappe.
Boucle sur toutes les livraisons sauf la dernière.
Si le nombre de balles a été inférieur à trois, générez un nombre aléatoire de 0 à 2, sinon faites simplement un coinflip entre 0 et 1.
Une valeur aléatoire de 2 est une balle, sinon elle augmente le nombre de coups.
Les valeurs 0 à 2 correspondent à la frappe, à la faute et au ballon, sauf que s'il y a trois frappes, la faute est imprimée à la place. (Quatre balles sont exclues ci-dessus.)
Déterminez si une frappe ou une balle ferait sortir le frappeur et choisissez parmi celles-ci ou un coup comme approprié.
la source
Perl 5 , 122 octets
Essayez-le en ligne!
la source
C (GCC)
164145142 octets-3 octets plafondcat
Essayez-le en ligne
la source
&n
au lieu detime(0)