Obbiettivo
Scrivi un programma o una funzione che accetta un numero intero positivo ne genera in modo casuale una serie legale di passi (d'ora in poi chiamata stringa del passo) di lunghezza n.
Ingresso
Un numero intero positivo diverso da zero n<= 100
Produzione
Restituisce una stringa casuale, o un elenco di caratteri, che rappresentano una possibile stringa di lunghezza valida n. I personaggi utilizzati saranno:
- B - Palla. Se ne accumuli 4, la pastella viene percorsa e finita la battuta.
- S - Colpisci. Se ne accumuli 3, la pastella è fuori e ha finito di battere.
- F - Fallo. Aumenterà anche il conteggio degli Strike ma non riuscirà a far uscire il battitore. Cioè, non puoi avere un Fallo come ultimo passo in una stringa valida. Qualsiasi fallo oltre due colpi / falli non aumenterà il conteggio degli Strike (il battitore ha già 2 colpi in quel punto e un terzo lo farebbe uscire).
- H - Hit. Il battitore ha colpito una palla in gioco e ha finito di battere.
(Questo è leggermente semplificato ma non ti preoccupare per quello)
Le stringhe di intonazione valide sono quelle che terminano in uno strike-out, una passeggiata o un colpo.
Cioè, una stringa di intonazione non valida ha entrambe
- tiri supplementari dopo la 4a palla, il 3 ° colpo o il colpo
- terminato prima di generare una quarta palla, un terzo colpo o un colpo.
Regole
- Il tuo programma deve essere in grado di produrre tutti i possibili risultati per un dato input.
- Il tuo programma non deve essere uniformemente casuale ma deve comunque seguire la regola precedente.
- Questo è code-golf .
Esempi
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
Fa Sè uno strike-out