Objetivo
Escriba un programa o función que tome un número entero positivo n
y genere aleatoriamente una serie legal de tonos (de aquí en adelante llamada cadena de tono) de longitud n
.
Entrada
Un entero positivo distinto de cero n
<= 100
Salida
Devuelve una cadena aleatoria, o una lista de caracteres, que representan una posible cadena de tono válida de longitud n
. Los caracteres utilizados serán:
- B - Pelota. Si acumula 4 de estos, la masa se camina y termina de batear.
- S - Huelga. Si acumula 3 de estos, la masa está fuera y terminó de batear.
- F - Falta. También aumentará el recuento de golpes, pero no puede sacar al bateador. Es decir, no puede hacer que un Foul sea el último lanzamiento de una cadena válida. Cualquier falta después de dos golpes / faltas no aumentará el conteo de Golpes (el bateador ya tiene 2 golpes en ese punto y un tercero lo sacaría).
- H - Hit. El bateador ha golpeado una pelota en juego y ha terminado de batear.
(Esto se simplifica ligeramente, pero no te preocupes por eso)
Las cuerdas de lanzamiento válidas son aquellas que terminan en un ponche, una caminata o un golpe.
Es decir, una cadena de tono inválida tiene
- lanzamientos adicionales después de la 4ta bola, 3ra huelga o golpe
- terminado antes de generar una cuarta bola, tercer golpe o golpe.
Reglas
- Su programa debe poder producir todos los resultados posibles para una entrada dada.
- Su programa no tiene que ser uniformemente aleatorio, pero debe seguir la regla anterior.
- Este es el código de golf .
Ejemplos
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
sy a S
es un