Mahjong è un gioco a tessere che è immensamente popolare in Asia. In genere si gioca con quattro giocatori e l'obiettivo del gioco è quello di essere la prima persona a completare una mano valida usando le tessere. Nel mahjong ci sono tre semi delle tessere più le tessere onore - per questa sfida considereremo solo le mani formate usando le tessere di un singolo seme.
Le tessere sono numerate da 1
a 9
, e ci sono esattamente quattro copie di ogni tessera. Una mano valida è composta da quattro serie da tre e una coppia, per un totale di quattordici tessere.
Un set di tre può essere:
- Una tripletta, tre della stessa tessera (es.
444
), Oppure - Una sequenza di tre tessere consecutive (ad esempio
123
o678
no357
). Le sequenze non vanno a capo (quindi912
non sono valide).
Una coppia è semplicemente due tessere identiche (ad es 55
.).
La sfida
Data una mano valida di quattordici tessere, determinane il punteggio in base ai seguenti criteri:
Condition Description Point/s
-------------------------------------------------------------------------------
Straight Contains the sequences 123 456 789 1
Identical sequences Contains two identical sequences 1
All simples Only 2-8, no 1s or 9s 1
All sequences All sets of three are sequences 1
All triplets All sets of three are triplets 2
Flush Single-suit hand (always applies) 5
(Il punteggio qui si basa sulle regole del mahjong giapponese, ma fortemente semplificato per rendere le specifiche meno disordinate.)
Il punteggio di una mano è la somma dei punti per le condizioni che soddisfa. Se una mano può essere scomposta in più di un modo, prendi la decomposizione con il punteggio più alto.
La lancetta di input è garantita, vale a dire quattordici tessere da 1 a 9 e ogni tessera appare al massimo quattro volte e si può presumere che sia già stata ordinata. L'input è un elenco di cifre (come una stringa o un singolo elenco di numeri interi) tramite STDIN, argomento della funzione o riga di comando. L'output può essere su STDOUT o sul valore di ritorno.
Casi test
22233355777888 -> 8 # 222 333 55 777 888, flush + all simp. + all trip.
11112345678999 -> 6 # 111 123 456 789 99, flush + straight
11123456788999 -> 5 # 111 234 567 88 999, flush only (no straight)
23344455566788 -> 7 # 234 345 456 567 88, flush + all simp. + all seq.
33334444555566 -> 8 # 33 345 345 456 456, flush + all simp. + all seq. + identical seq.
11122233377799 -> 7 # 111 222 333 777 99, flush + all trip. (no identical seq.)
12344556678889 -> 8 # 123 456 456 789 88, flush + all seq. + straight + identical seq.
11344556678999 -> 5 # 11 345 456 678 999, flush only (no identical seq.)
22233344455566 -> 8 # 222 333 444 555 66, flush + all simp. + all trip.
11112233344555 -> 5 # 111 123 234 345 55, flush only
Per il quinto esempio, pur avendo due coppie di sequenze identiche, solo uno deve essere presente per raggiungere il punto. La decomposizione 345 345 345 345 66
segnerebbe lo stesso, mentre i 333 345 444 555 66
punteggi peggiori.
punteggio
Questo è code-golf , quindi vince la soluzione nel minor numero di byte. Si applicano scappatoie standard .
Sfida correlata: cosa stai aspettando? (Un risolutore di mahjong)