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 1a 9e 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,
123ou678nã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 66teria a mesma pontuação, enquanto a pontuação seria 333 345 444 555 66pior.
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)