Objetivo
Escreva um programa ou função que use um número inteiro positivo n
e gere aleatoriamente uma série legal de arremessos (doravante denominada sequência de afinação) de comprimento n
.
Entrada
Um número inteiro positivo diferente de zero n
<= 100
Resultado
Retorne uma sequência aleatória, ou lista de caracteres, que represente uma sequência de lançamentos possível e válida n
. Os caracteres utilizados serão:
- B - bola. Se você acumular 4 delas, a massa é levada e terminada.
- S - greve. Se você acumular 3 delas, a massa está fora e terminou de rebater.
- F - Falta. Também aumentará a contagem de Strike, mas não conseguirá eliminar a massa. Ou seja, você não pode ter uma falta como o último arremesso em uma sequência válida. Quaisquer faltas após dois ataques / faltas não aumentarão a contagem de ataques (o batedor já tem 2 ataques nesse ponto e um terceiro o eliminaria).
- H - Hit. A massa bateu uma bola em jogo e terminou de rebater.
(Isso é um pouco simplificado, mas não se preocupe com isso)
Strings de pitch válidas são aquelas que terminam em um strike-out, uma caminhada ou um hit.
Ou seja, uma sequência de afinação inválida tem
- arremessos adicionais após a 4ª bola, 3ª batida ou batida
- terminado antes de gerar uma quarta bola, um terceiro golpe ou um golpe.
Regras
- Seu programa deve ser capaz de produzir todos os resultados possíveis para uma determinada entrada.
- Seu programa não precisa ser uniformemente aleatório, mas ainda deve seguir a regra anterior.
- Isso é código-golfe .
Exemplos
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
umS
é um strike-outRespostas:
Python 2 , 128 bytes
Experimente online!
Gere aleatoriamente a corda do arremesso até que a massa esteja pronta, produza-a se tiver o comprimento certo e tente novamente do zero.
Python 2 , 136 bytes
Experimente online!
fonte
n=8
pode gerar uma cadeia deF
s no finalS/3
para(S>2)
corrigi-la.05AB1E ,
445044 bytesRiscado
44
já não é 44 :)Porta da resposta Python 2 do @xnor , por isso, certifique-se de vomitá-lo também se você gosta desta resposta!
+6 bytes devido a uma correção de bug e, depois disso, -6 bytes novamente, graças ao @xnor , portando sua correção mais eficiente em comparação com minha solução temporária, como eu esperava. ;)
Experimente online ou verifique mais resultados aleatórios .
Explicação:
fonte
X/3
paraX>2
.R , 148 bytes
Experimente online!
Gera a sequência, usando a inclusão condicional nos conjuntos de dados de amostra para garantir que o resultado seja uma possível sequência de afinação.
Possivelmente a amostragem de rejeição (como a resposta python do xnor faz ) é mais curta.
Referência aleatória de "F e S" que ficava tocando na minha cabeça toda vez que eu digitava uma dessas letras ...
fonte
JavaScript (SpiderMonkey) , 137 bytes
Experimente online!
fonte
Pitão, 53 bytes
Experimente online aqui .
Parece demais, acho que pode ser necessária outra abordagem.
fonte
JavaScript (ES6),
107 10699 bytesExperimente online!
Comentado
fonte
Tinta ,
120119116117 bytesExperimente online!
Provavelmente ainda jogável.
Ungolfed (levemente reformatado)
Editar% s
->->
vez de->END
.n
anteriormente.fonte
APL (Dyalog Unicode) , SBCS de 77 bytes
Experimente online!
fonte
Carvão vegetal , 57 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Comece com 0 bolas e 0 acertos.
Repetir todas as entregas, exceto a última.
Se houver menos de três bolas, gere um número aleatório de 0 a 2, caso contrário, basta trocar de moeda entre 0 e 1.
Um valor aleatório de 2 é uma bola; caso contrário, aumenta a contagem de ataques.
Os valores de 0 a 2 são mapeados para a tacada, falta e bola, exceto que, se houver três tacadas, a falta será impressa. (Quatro bolas estão excluídas acima.)
Determine se um ataque ou bola levaria a bola para fora e escolha entre aqueles ou um golpe, conforme apropriado.
fonte
Perl 5 , 122 bytes
Experimente online!
fonte
C (GCC)
164145142 bytes-3 bytes ceilingcat
Experimente online
fonte
&n
vez detime(0)