Mancala é o nome de uma família de jogos de tabuleiro que geralmente envolve uma série de xícaras cheias de contas que os jogadores manipulam. Esse desafio usará um conjunto de regras específico para uma variante de paciência do jogo.
O tabuleiro consiste em uma "cesta" em uma extremidade, seguida por um número infinito de xícaras, numeradas a partir de 1. Algumas das xícaras terão algum número de contas nelas. Se o n
copo estiver exatamente com n
contas, você pode "semear" as contas. Semear significa tirar todas as n
contas do copo e depositá-las uma de cada vez em cada copo na direção da cesta. A última conta irá para a cesta. O jogador ganha quando todas as contas no tabuleiro estão na cesta.
Claramente, existem muitas pranchas que não podem ser ganhadas, como se houvesse exatamente uma conta no segundo copo. Não há jogos legais porque todos os copos com 0 contas não podem ser semeados, e o segundo copo não tem contas suficientes para serem semeadas. Obviamente, isso não é divertido, então sua tarefa será criar pranchas vencíveis.
Tarefa
Dado um número inteiro positivo representando um número de contas, é apresentada uma lista de números inteiros não negativos que representam o número de contas que devem ser colocadas em cada copo para formar uma placa que pode ser vencida, conforme descrito acima. Esta lista não deve conter zeros à direita.
Para um determinado número de contas, sempre há exatamente uma configuração de placa que pode ser vencida.
Demonstração
Esta é uma demonstração de como jogar o tabuleiro vencível e a entrada de 4. O tabuleiro vencível é [0, 1, 3]
. Começamos com o único movimento disponível, semeando as contas do terceiro copo para obter [1, 2, 0]
. Agora nós realmente temos uma escolha, mas a única correta é semear o primeiro copo, ficando: [0, 2, 0]
. Então semeamos o segundo copo cedendo [1, 0, 0]
e finalmente semeamos o primeiro copo novamente para obter todos os copos vazios.
Casos de teste:
1 => [1]
2 => [0, 2]
3 => [1, 2]
4 => [0, 1, 3]
5 => [1, 1, 3]
6 => [0, 0, 2, 4]
7 => [1, 0, 2, 4]
8 => [0, 2, 2, 4]
9 => [1, 2, 2, 4]
10 => [0, 1, 1, 3, 5]
11 => [1, 1, 1, 3, 5]
12 => [0, 0, 0, 2, 4, 6]
13 => [1, 0, 0, 2, 4, 6]
14 => [0, 2, 0, 2, 4, 6]
15 => [1, 2, 0, 2, 4, 6]
16 => [0, 1, 3, 2, 4, 6]
17 => [1, 1, 3, 2, 4, 6]
18 => [0, 0, 2, 1, 3, 5, 7]
19 => [1, 0, 2, 1, 3, 5, 7]
20 => [0, 2, 2, 1, 3, 5, 7]
Muito obrigado a PeterTaylor por apresentar um programa para gerar casos de teste!