Objetivo
Escreva um programa ou função que use um número inteiro positivo n
e 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
F
um S
é um strike-out