Mahjong é um jogo de peças imensamente popular na Ásia. Normalmente é jogado com quatro jogadores, e o objetivo do jogo é ser a primeira pessoa a completar uma mão válida usando as peças. No mahjong, existem três naipes e azulejos de honra - para este desafio, consideraremos apenas as mãos formadas usando peças de um único naipe.
Os blocos são numerados de 1
a 9
e existem exatamente quatro cópias de cada bloco. Uma mão válida consiste em quatro conjuntos de três e um par, para um total de catorze peças.
Um conjunto de três pode ser:
- Um trigêmeo, três do mesmo bloco (por exemplo
444
), ou - Uma sequência de três blocos consecutivos (por exemplo,
123
ou678
não357
). As sequências não são agrupadas (por isso912
é inválido).
Um par é simplesmente duas peças idênticas (por exemplo 55
).
O desafio
Dada uma mão válida de catorze peças, determine sua pontuação com base nos seguintes critérios:
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
(A pontuação aqui é baseada nas regras japonesas de mahjong, mas muito simplificada para tornar as especificações menos confusas.)
A pontuação de uma mão é a soma dos pontos pelas condições que ela satisfaz. Se uma mão puder ser decomposta em mais de uma maneira, faça a decomposição com a pontuação mais alta.
O ponteiro de entrada é garantido como válido, ou seja, catorze peças de 1 a 9 e cada peça aparece no máximo quatro vezes, e pode-se presumir que já está classificada. Entrada é uma lista de dígitos (como uma sequência ou uma única lista plana de números inteiros) via STDIN, argumento de função ou linha de comando. A saída pode ser STDOUT ou retornar valor.
Casos de teste
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
Para o quinto exemplo, apesar de ter dois pares de seqüências idênticas, apenas um precisa estar presente para atingir o objetivo. A decomposição 345 345 345 345 66
teria a mesma pontuação, enquanto a pontuação seria 333 345 444 555 66
pior.
Pontuação
Isso é código-golfe , então a solução com o menor número de bytes vence. Aplicam-se brechas padrão .
Desafio relacionado: O que você está esperando? (Um solucionador de mahjong)