Objetivo
Escriba un programa o función que tome un número entero positivo n
y genere aleatoriamente una serie legal de tonos (de aquí en adelante llamada cadena de tono) de longitud n
.
Entrada
Un entero positivo distinto de cero n
<= 100
Salida
Devuelve una cadena aleatoria, o una lista de caracteres, que representan una posible cadena de tono válida de longitud n
. Los caracteres utilizados serán:
- B - Pelota. Si acumula 4 de estos, la masa se camina y termina de batear.
- S - Huelga. Si acumula 3 de estos, la masa está fuera y terminó de batear.
- F - Falta. También aumentará el recuento de golpes, pero no puede sacar al bateador. Es decir, no puede hacer que un Foul sea el último lanzamiento de una cadena válida. Cualquier falta después de dos golpes / faltas no aumentará el conteo de Golpes (el bateador ya tiene 2 golpes en ese punto y un tercero lo sacaría).
- H - Hit. El bateador ha golpeado una pelota en juego y ha terminado de batear.
(Esto se simplifica ligeramente, pero no te preocupes por eso)
Las cuerdas de lanzamiento válidas son aquellas que terminan en un ponche, una caminata o un golpe.
Es decir, una cadena de tono inválida tiene
- lanzamientos adicionales después de la 4ta bola, 3ra huelga o golpe
- terminado antes de generar una cuarta bola, tercer golpe o golpe.
Reglas
- Su programa debe poder producir todos los resultados posibles para una entrada dada.
- Su programa no tiene que ser uniformemente aleatorio, pero debe seguir la regla anterior.
- Este es el código de golf .
Ejemplos
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
sy aS
es unRespuestas:
Python 2 , 128 bytes
Pruébalo en línea!
Genere aleatoriamente la secuencia de tono hasta que la masa esté lista, envíela si resulta que tiene la longitud correcta y, de lo contrario, intente nuevamente desde cero.
Python 2 , 136 bytes
Pruébalo en línea!
fuente
n=8
puede generar una cadena deF
s al finalS/3
para(S>2)
arreglarlo.05AB1E ,
445044 bytesTachado ya
44
no es 44 :)Puerto de la respuesta Python 2 de @xnor , ¡así que asegúrate de votarlo también si te gusta esta respuesta!
+6 bytes debido a una corrección de errores, y después de eso -6 bytes nuevamente gracias a @xnor al portar su solución más eficiente en comparación con mi solución temporal, como esperaba. ;)
Pruébelo en línea o verifique algunas salidas más aleatorias .
Explicación:
fuente
X/3
aX>2
.R , 148 bytes
Pruébalo en línea!
Genera la cadena, utilizando la inclusión condicional en los conjuntos de datos de muestreo para garantizar que el resultado sea una posible secuencia de tono.
Posiblemente hacer un muestreo de rechazo (como lo hace la respuesta de Python de xnor ) es más corto.
Referencia aleatoria "F y S" que seguía jugando en mi cabeza cada vez que escribía una de esas letras ...
fuente
JavaScript (SpiderMonkey) , 137 bytes
Pruébalo en línea!
fuente
Pyth, 53 bytes
Pruébelo en línea aquí .
Esto se siente demasiado tiempo, creo que se puede requerir otro enfoque.
fuente
JavaScript (ES6),
107 10699 bytesPruébalo en línea!
Comentado
fuente
Tinta ,
120119116117 bytesPruébalo en línea!
Probablemente todavía golfable.
Sin golf (ligeramente reformateado)
Ediciones
->->
lugar de->END
.n
antes.fuente
APL (Dyalog Unicode) , 77 bytes SBCS
Pruébalo en línea!
fuente
Carbón , 57 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Comienza con 0 bolas y 0 golpes.
Recorra todas las entregas excepto la última.
Si han sido menos de tres bolas, entonces genere un número aleatorio de 0 a 2, de lo contrario solo haga un coinflip entre 0 y 1.
Un valor aleatorio de 2 es una bola; de lo contrario, aumenta el recuento de golpes.
Los valores 0 a 2 se asignan al golpe, falta y bola, excepto que si hubiera tres golpes, se imprime la falta. (Cuatro bolas están excluidas arriba).
Determine si un golpe o una bola sacarían al bateador y elija entre ellos o un golpe, según corresponda.
fuente
Perl 5 , 122 bytes
Pruébalo en línea!
fuente
C (GCC)
164145142 bytes-3 bytes ceilingcat
Pruébalo en línea
fuente
&n
lugar detime(0)