Tor
Schreiben Sie ein Programm oder eine Funktion, die eine positive ganze Zahl verwendet n
und zufällig eine zulässige Reihe von Tonhöhen (im Folgenden als Tonhöhenzeichenfolge bezeichnet) mit einer Länge generiert n
.
Eingang
Eine positive ganze Zahl ungleich Null n
<= 100
Ausgabe
Geben Sie eine zufällige Zeichenfolge oder eine Liste von Zeichen zurück, die eine mögliche gültige Tonhöhenzeichenfolge darstellen n
. Die verwendeten Zeichen sind:
- B - Ball. Wenn Sie 4 davon ansammeln, wird der Teig gelaufen und das Schlagen beendet.
- S - Streik. Wenn Sie 3 davon ansammeln, ist der Teig leer und das Schlagen beendet.
- F - Foul. Erhöht auch die Strike-Anzahl, kann aber den Teig nicht herausholen. Das heißt, Sie können nicht ein Foul als letzte Tonhöhe in einer gültigen Zeichenfolge haben. Alle Fouls nach zwei Schlägen / Fouls erhöhen die Schlagzahl nicht (der Schlagmann hat zu diesem Zeitpunkt bereits 2 Schläge und ein dritter würde ihn rausholen).
- H - Treffer. Der Schlagmann hat einen Ball ins Spiel geschlagen und ist mit dem Schlagen fertig.
(Dies ist etwas vereinfacht, aber mach dir darüber keine Sorgen)
Gültige Tonhöhen sind solche, die mit einem Strike-Out, einem Walk oder einem Hit enden.
Dh eine ungültige Tonhöhenfolge hat entweder
- zusätzliche Tonhöhen nach dem 4. Ball, 3. Schlag oder Treffer
- Beendet vor dem Erzeugen eines 4. Balls, 3. Schlags oder Treffers.
Regeln
- Ihr Programm muss in der Lage sein, alle möglichen Ergebnisse für eine bestimmte Eingabe zu erzielen.
- Ihr Programm muss nicht einheitlich zufällig sein, sondern muss der vorherigen Regel folgen.
- Das ist Code-Golf .
Beispiele
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 und a S
ist ein Strike-Out