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 aS
ist ein Strike-OutAntworten:
Python 2 , 128 Bytes
Probieren Sie es online aus!
Generieren Sie die Pitch-Saite nach dem Zufallsprinzip, bis der Teig fertig ist, geben Sie sie aus, wenn sich herausstellt, dass sie die richtige Länge hat, und versuchen Sie es andernfalls erneut von Grund auf.
Python 2 , 136 Bytes
Probieren Sie es online aus!
quelle
n=8
kann eine Kette vonF
s am EndeS/3
zu(S>2)
beheben.05AB1E ,
445044 BytesDurchgestrichen
44
ist nicht mehr 44 :)Port of @xnors Python 2-Antwort , also stimmen Sie ihm ebenfalls zu, wenn Ihnen diese Antwort gefällt!
+6 Bytes aufgrund einer Fehlerbehebung und danach -6 Bytes wieder dank @xnor, indem er seinen Weg effizienter portiert als meine vorübergehende Umgehung , wie ich erwartet hatte. ;)
Probieren Sie es online aus oder überprüfen Sie weitere zufällige Ausgaben .
Erläuterung:
quelle
X/3
zuX>2
.R , 148 Bytes
Probieren Sie es online aus!
Generiert die Zeichenfolge unter Verwendung der bedingten Aufnahme in die Stichprobendatensätze, um sicherzustellen, dass das Ergebnis eine mögliche Tonhöhenfolge ist.
Möglicherweise ist das Ablehnen-Sampling (wie in der Python-Antwort von xnor ) kürzer.
Zufällige "F und S" -Referenz , die jedes Mal in meinem Kopf spielte, wenn ich einen dieser Buchstaben tippte ...
quelle
JavaScript (SpiderMonkey) , 137 Bytes
Probieren Sie es online aus!
quelle
Pyth, 53 Bytes
Probieren Sie es hier online aus .
Das fühlt sich viel zu lang an, ich denke, ein anderer Ansatz könnte erforderlich sein.
quelle
JavaScript (ES6),
107 10699 ByteProbieren Sie es online aus!
Kommentiert
quelle
Tinte ,
120119116117 BytesProbieren Sie es online aus!
Wahrscheinlich noch golfbar.
Ungolfed (leicht neu formatiert)
Bearbeitungen
->->
statt->END
.n
früheres Dekrementieren wurden drei Bytes gespeichert .quelle
APL (Dyalog Unicode) , 77 Byte SBCS
Probieren Sie es online aus!
quelle
Holzkohle , 57 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Beginnen Sie mit 0 Bällen und 0 Schlägen.
Durchlaufen Sie alle Lieferungen mit Ausnahme der letzten.
Wenn es weniger als drei Bälle waren, generieren Sie eine Zufallszahl von 0 bis 2, andernfalls nur einen Münzwurf zwischen 0 und 1.
Ein zufälliger Wert von 2 ist ein Ball, andernfalls erhöht er die Schlagzahl.
Die Werte 0 bis 2 sind auf Schlag, Foul und Ball abgebildet, außer dass bei drei Schlägen stattdessen Foul gedruckt wird. (Vier Bälle sind oben ausgeschlossen.)
Bestimmen Sie, ob ein Schlag oder ein Ball den Schlagmann herausholen würde, und wählen Sie aus diesen oder einem Treffer aus.
quelle
Perl 5 , 122 Bytes
Probieren Sie es online aus!
quelle
C (GCC)
164145142 Bytes-3 Bytes Deckenkatze
Probieren Sie es online aus
quelle
&n
statttime(0)