Eu estava assistindo o campeonato mundial de sinuca e isso me fez pensar ..
Pontuação de sinuca
No jogo de sinuca, existem certas regras que você deve aderir também:
- Quando houver bolas vermelhas na mesa, durante o seu turno, você deve primeiro colocar uma bola vermelha
- Depois de envasar cada bola vermelha, você deve colocar uma bola colorida (não vermelha) (a bola colorida em vaso é substituída na mesa)
- Depois que todas as bolas vermelhas estiverem levantadas (existem 15), você pode primeiro escolher uma bola colorida e depois começar com a bola com a menor pontuação e seguir até a bola com a maior pontuação (elas não são substituídas)
- Não envasar em nenhum momento termina o seu turno.
- Pontos por bola
- Bola vermelha: 1 ponto
- Bola amarela: 2 pontos
- Bola verde: 3 pontos
- Bola marrom: 4 pontos
- Bola azul: 5 pontos
- Bola rosa: 6 pontos
- Bola preta: 7 pontos
A questão
Você começa com uma mesa com todas as bolas ainda - 15 vermelhas e uma de cada uma das outras bolas coloridas - e recebe a pontuação de um jogador na sinuca após o primeiro turno. Ponto?
A entrada será uma pontuação que vai de 1 a 147. Você pode escolher se é um número inteiro ou uma sequência. A saída deve ser as diferentes combinações de número de vezes que você colocou cada bola.
Casos de teste:
Input: 4
Output:
1r 1g
2r 1y
Input: 25
Output:
4r 3b
5r 2b 1br 1y
5r 2b 2g
...
9r 8y
Regras:
- Você pode escolher se deseja exibir as possibilidades divididas por uma nova linha ou um separador de algum tipo (/ ,; | \ ou até outros que estão faltando)
Isso é codegolf, então o código mais curto vence.
"5r 3b 2g"
pode ser que a saída seja[5,0,2,0,3,0,0]
(contanto que isso seja consistente)?b
para marrom ebl
azul; entãobk
para preto? Poderíamos usarn
,e
ek
(últimos letras) para estes três? Que taldleruna
identificar todas as oito cores (terceira letra de cada)?Respostas:
Geléia , 66 bytes
Bem, agora é muito lento para o TIO!
... então aqui está uma pasta das 2636 maneiras de produzir exatamente 100 produzidas offline.
... e aqui está uma versão que será executada lá com apenas seis vermelhos (interrupção máxima = 75)
Imprime uma grade de números cada linha, sendo uma lista separada por espaços de valores de bola (por exemplo, três vermelhos e dois verdes estariam em uma leitura de linha
1 1 1 3 3
).Para uma versão agrupada por valores que imprime linhas de contagens, juntamente com os nomes completos das bolas, em 102 bytes:
Quão?
fonte
JavaScript (ES7),
188180178 bytesRetorna uma matriz de matrizes (classificadas de vermelho para preto).
Comentado
Nota : Esta versão não inclui a última otimização ativada
p
(agora inicializada com 7), o que dificulta a compreensão da lógica.Saída de exemplo
Abaixo está a saída para n = 140:
Demo
Isso é muito lento para um snippet. Você pode tentar aqui aqui . (Você pode receber um ou dois alertas de script que não respondem , mas devem ser concluídos.)
fonte