目标
编写一个程序或函数,该程序或函数需要一个正整数,n
并随机生成一系列合法的长度的音高(此后称为音高字符串)n
。
输入值
非零正整数n
<= 100
输出量
返回一个随机字符串或字符列表,这些字符串或字符串表示可能的有效音调字符串length n
。使用的字符将是:
- B-球。如果您累积了其中的4个,击球手就会走动并击球。
- S-罢工。如果您累积了其中的3个,击球手就没电了,击球完毕。
- F-犯规。也将增加打击次数,但无法击退击球员。即,您不能让Foul成为有效字符串中的最后一个音调。超过两次罢工/犯规的任何犯规都不会增加罢工的次数(击球手此时已经有2次罢工,而第3次将使他退出)。
- H-命中。击球手将球击中并完成击球。
(这被略微简化,但是您不必担心)
有效的音高字符串是指以三振,步行或击球结尾的字符串。
即,无效的音高字符串具有
- 在第4球,第3击或击中之后的其他投球
- 在产生第四个球,第三个打击或命中之前终止。
规则
- 您的程序必须能够针对给定的输入产生所有可能的结果。
- 您的程序不必一定是随机的,但仍必须遵循以前的规则。
- 这是代码高尔夫球。
例子
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