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 a S
est une grève