Objetivo
Escreva um programa ou função que use um número inteiro positivo ne gere aleatoriamente uma série legal de arremessos (doravante denominada sequência de afinação) de comprimento n.
Entrada
Um número inteiro positivo diferente de zero n<= 100
Resultado
Retorne uma sequência aleatória, ou lista de caracteres, que represente uma sequência de lançamentos possível e válida n. Os caracteres utilizados serão:
- B - bola. Se você acumular 4 delas, a massa é levada e terminada.
- S - greve. Se você acumular 3 delas, a massa está fora e terminou de rebater.
- F - Falta. Também aumentará a contagem de Strike, mas não conseguirá eliminar a massa. Ou seja, você não pode ter uma falta como o último arremesso em uma sequência válida. Quaisquer faltas após dois ataques / faltas não aumentarão a contagem de ataques (o batedor já tem 2 ataques nesse ponto e um terceiro o eliminaria).
- H - Hit. A massa bateu uma bola em jogo e terminou de rebater.
(Isso é um pouco simplificado, mas não se preocupe com isso)
Strings de pitch válidas são aquelas que terminam em um strike-out, uma caminhada ou um hit.
Ou seja, uma sequência de afinação inválida tem
- arremessos adicionais após a 4ª bola, 3ª batida ou batida
- terminado antes de gerar uma quarta bola, um terceiro golpe ou um golpe.
Regras
- Seu programa deve ser capaz de produzir todos os resultados possíveis para uma determinada entrada.
- Seu programa não precisa ser uniformemente aleatório, mas ainda deve seguir a regra anterior.
- Isso é código-golfe .
Exemplos
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
Fum Sé um strike-out