Stavo guardando il campionato mondiale di biliardo e mi ha fatto pensare ...
Punteggio dello snooker
Nel gioco dello snooker ci sono alcune regole che devi rispettare anche:
- Quando ci sono palle rosse sul tavolo, durante il tuo turno devi prima lanciare una palla rossa
- Dopo aver invaso ogni palla rossa, devi lanciare una palla colorata (non rossa) (la palla colorata in vaso viene quindi sostituita sul tavolo)
- Dopo che tutte le palline rosse sono alte (ce ne sono 15) puoi prima scegliere una pallina colorata e poi iniziare con la pallina con il punteggio più basso e salire fino alla pallina con il punteggio più alto (non vengono sostituite)
- Non invasare in nessun punto termina il tuo turno.
- Punti per palla
- Palla rossa: 1 punto
- Palla gialla: 2 punti
- Palla verde: 3 punti
- Palla marrone: 4 punti
- Palla blu: 5 punti
- Palla rosa: 6 punti
- Palla nera: 7 punti
La domanda
Inizi con un tavolo con tutte le palle ancora su di esso - 15 rosse e una delle altre palle colorate - e ti viene dato il punteggio di un giocatore di biliardo dopo il loro primo turno, quali sono i modi in cui avrebbero potuto raggiungere questo obiettivo Punto?
L'input sarà un punteggio che va da 1 a 147. Puoi scegliere se è un numero intero o una stringa. L'output dovrebbe essere la diversa combinazione del numero di volte in cui hai inserito ogni palla.
Casi test:
Input: 4
Output:
1r 1g
2r 1y
Input: 25
Output:
4r 3b
5r 2b 1br 1y
5r 2b 2g
...
9r 8y
Regole:
- Puoi scegliere se generare le possibilità divise per una nuova riga o un separatore di qualche tipo (/ ,; | \ o anche altri che mi mancano)
Questo è codegolf, quindi vince il codice più corto.
"5r 3b 2g"potrebbe essere emesso come [5,0,2,0,3,0,0](purché sia coerente)?
bper il marrone e blper il blu; quindi bkper il nero? Potremmo usare n, ee k(ultime lettere) per questi tre? Che ne dici dlerunadi identificare tutti e otto i colori (terza lettera di ciascuno)?