Mölkky
Mölkky é um jogo de tiro finlandês. Os jogadores usam um pino de madeira (também chamado de "mölkky") para tentar derrubar pinos de madeira de dimensões quase semelhantes ao pino de lançamento, marcados com números de 1 a 12. A posição inicial dos pinos é a seguinte:
(07)(09)(08)
(05)(11)(12)(06)
(03)(10)(04)
(01)(02)
Esta descrição e as regras abaixo são baseadas na Wikipedia .
Regras de Mölkky simplificadas
Bater sobre um pino marca o número de pontos marcados no pino.
Bater 2 ou mais pinos marca o número de pinos derrubados (por exemplo, bater 3 pinos ganha 3 pontos).
O objetivo do jogo é atingir exatamente 50 pontos. Marcar mais de 50 pontos é penalizado definindo a pontuação de volta para 25 pontos.
Para o propósito deste desafio, assumiremos que os pinos estão sempre na ordem exata descrita acima. (Em um jogo real, os pinos são levantados novamente após cada lançamento no local em que aterrissaram.)
Todas as outras regras de Mölkky são ignoradas e apenas um jogador é considerado.
Entrada
Uma lista não vazia de listas de 12 booleanos. Cada lista de booleanos descreve o resultado de um arremesso: 1 se o pino foi derrubado e 0 em caso contrário. Os booleanos são fornecidos na ordem exata dos pinos, do canto superior esquerdo para o canto inferior direito: 7 , 9 , 8 , 5 , 11 , 12 , 6 , 3 , 10 , 4 , 1 , 2 .
Saída
A pontuação após todos os lances descritos na entrada, calculada aplicando as regras 1 , 2 e 3 .
Exemplo detalhado
Vamos considerar a seguinte entrada:
// 07 09 08 05 11 12 06 03 10 04 01 02
[ [ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], // scores 5 (rule #1)
[ 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 ], // scores 2 (rule #2), total: 7
[ 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1 ], // scores 7, total: 14
[ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ], // scores 12, total: 26
[ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ], // scores 12, total: 38
[ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 ], // scores 11, total: 49
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], // scores 7, total: 56 -> 25 (rule #3)
[ 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ] // scores 2, total: 27
A saída esperada é 27 .
Regras do desafio
- Você pode receber informações em qualquer formato razoável. Em vez de listas de booleanos, você pode usar números inteiros em que o bit mais significativo é o pino 7 e o bit menos significativo é o pino 2. Nesse formato, o exemplo acima seria passado como
[ 256, 2304, 127, 64, 64, 128, 2048, 3072 ]
. - A lista de entrada pode conter arremessos em que nenhum pino é derrubado; nesse caso, a pontuação é mantida inalterada.
- Você não tem nada de especial para fazer quando a pontuação atinge exatamente 50 pontos. Mas você pode assumir que nenhum outro lance se seguirá quando isso acontecer.
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Casos de teste
Usando listas de números inteiros como entrada:
[ 0 ] --> 0
[ 528 ] --> 2
[ 4095 ] --> 12
[ 64, 0, 3208 ] --> 16
[ 16, 1907, 2048 ] --> 18
[ 2023, 2010, 1, 8 ] --> 29
[ 1726, 128, 35, 3136, 1024 ] --> 34
[ 32, 32, 2924, 2, 256, 16 ] --> 28
[ 64, 64, 2434, 1904, 3251, 32, 256 ] --> 25
[ 3659, 2777, 2211, 3957, 64, 2208, 492, 2815 ] --> 25
[ 2047, 1402, 2, 2599, 4, 1024, 2048, 3266 ] --> 50
[ 256, 2304, 127, 64, 64, 128, 2048, 3072 ] --> 27
[ 16, 8, 128, 1, 2048, 1, 2048, 513, 8, 3206 ] --> 30
Você pode seguir este link para obter esses casos de teste no formato booleano.