Nota: ciò è correlato a una variante del gioco Rummikub
Contesto e regole
Rummikub è un gioco basato su tessere. Esistono quattro colori: rosso, arancione, blu e nero. Per ogni colore ci sono 13 tessere (etichettate da 1 a 13) e ci sono anche 2 jolly che sono indipendenti dal colore, quindi ci sono 54 pezzi in totale. In questa variante di Rummikub, ogni giocatore riceve 14 tessere e deve ottenere un'altra tessera e rilasciarne un'altra ogni round, in modo che il conteggio delle tessere sia costante. I giocatori non vedono le rispettive tessere. L'obiettivo è quello di raggruppare le tessere, in modo tale che tutti i pezzi appartengano ad almeno un gruppo (vedi sotto). Quando un giocatore ha raggruppato tutti i pezzi, lascia cadere il tabellone delle tessere e rivela i propri pezzi. Gli altri controllano quindi se tutte le combinazioni sono valide e se lo sono, il giocatore vince il round.
Come possono essere raggruppate le tessere?
Esistono solo due tipi di gruppi:
Gruppi multicolori :
- Sono composti da 3 o 4 tessere.
- Contengono solo tessere con lo stesso numero su di esse.
- Tutte le piastrelle sono di diversi colori.
- Esempio:
RED 9, BLUE 9, BLACK 9
.
Gruppi monocromatici :
- Sono composti da almeno 3 tessere.
- Non possono contenere più di 13 tessere.
- Contengono solo tessere con numeri diversi e consecutivi su di esse, in ordine crescente.
- Tutte le piastrelle hanno lo stesso colore.
- Le tessere etichettate con
1
non possono essere posizionate dopo quelle etichettate13
. - Esempio:
RED 5, RED 6, RED 7
.
Aspetta, cosa fanno i Jolly?
I jolly possono sostituire qualsiasi pezzo del gioco. Ad esempio, il nostro primo esempio può diventare JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
o RED 9, BLUE 9, JOKER
. Lo stesso vale per l'altro nostro esempio. Tuttavia, non si possono collocare due jolly nello stesso gruppo, quindi cose come JOKER, ORANGE 8, JOKER
sono vietate.
Compito
Dato un gruppo di tessere Rummikub, determinare se è valido. Hai la garanzia che non verranno visualizzate tessere duplicate, ad eccezione dei 2 jolly e che le tessere che ricevi come input sono valide (ad es. Cose come 60
non appariranno).
Input Output
È possibile accettare input e fornire output con qualsiasi metodo standard.
Alcuni formati di input validi: elenco di stringhe, elenco di tuple, elenchi nidificati, stringhe o qualsiasi altra cosa tu ritenga adatta. I colori possono essere presi come stringhe (ad es . "Blue","Red", etc.
:), come abbreviazioni di stringhe (si prega di rendere distinguibili le piastrelle blu e nere) o come numeri interi corrispondenti a un colore. Quando si tratta di jolly, è necessario menzionare il modo in cui il programma li riceve come input. Se scegli le stringhe, potresti avere qualcosa di simile RED 9, JOKER, ...
, se scegli le tuple che puoi avere (9,"RED"), ("JOKER")
o qualcosa di equivalente. Se aiuta, potresti ricevere un colore per quel Joker (che non dovrebbe influenzare l'output del tuo programma). Ad esempio, potresti avere ("JOKER","RED")
o ("JOKER","BLUE")
, ma ciò non dovrebbe influenzare l'output in alcun modo.
Per quanto riguarda l'output, si applicano le regole standard per un problema decisionale .
Esempi lavorati
Facciamo un esempio, che si spera faciliterebbe la comprensione. Dato un gruppo come segue, in cui ogni tupla rappresenta una tessera:
[(9, "ROSSO"), (9, "ARANCIONE"), ("JOKER"), (9, "NERO")]
Questo dovrebbe restituire un valore di verità, perché l'input è valido. In questo caso, il Joker sostituisce (9, "BLUE")
e formano un gruppo multicolore.
Se ti verrà dato il seguente gruppo:
[(9, "BLU"), (9, "ARANCIONE"), (9, "ROSSO"), (9, "NERO"), ("JOKER")]
Sarebbe invalido, e quindi il programma dovrebbe restituire un valore falso, perché non c'è nulla che il jolly possa sostituire, poiché il numero massimo di carte in un gruppo multicolore è 4.
Casi di prova aggiuntivi
Questi sono per una suite di test estesa che copre quasi tutte le possibili situazioni:
Ingresso -> Uscita [(1, "BLU"), (2, "BLU"), (3, "BLU"), (4, "BLU"), (5, "BLU"), (6, "BLU")] - > verità [(6, "BLU"), (6, "ROSSO"), (6, "NERO)] -> verità [(5, "nera"), (6, "nera"), (7 "nera"), (8, "nera"), (9, "nera"), (10, "nera"), ( "JOKER"), (12, "NERO")] -> verità [("JOKER"), (3, "BLU"), (3, "ROSSO")] -> verità [(8, "NERO"), (2, "ROSSO"), (13, "BLU")] -> falsy [(4, "ROSSO"), (3, "ROSSO"), (5, "ROSSO")] -> falsy [(5, "NERO"), (6, "NERO)] -> falsy [("JOKER"), (5, "RED"), ("JOKER")] -> falsy [(4, "ROSSO"), (5, "ROSSO"), (6, BLU ")] -> falsy [(4, "RED"), ("JOKER"), (5, "RED")] -> falsy [(12, "NERO"), (13, "NERO), (1," NERO ")] -> falsy
Questo è code-golf , quindi vince il codice più breve in byte in ogni lingua!