Mancala es el nombre de una familia de juegos de mesa que generalmente implican una serie de tazas llenas de cuentas que los jugadores manipulan. Este desafío utilizará un conjunto de reglas específicas para una variante de solitario del juego.
El tablero consiste en una "canasta" en un extremo, seguido de un número infinito de tazas, numeradas a partir del 1. Algunas de las tazas tendrán cierto número de cuentas. Si la n
copa tiene exactamente n
cuentas, puede "sembrarlas". Sembrar significa sacar todas las n
cuentas de la taza, luego depositarlas una a la vez en cada taza hacia la canasta. La última cuenta irá a la canasta. El jugador gana cuando todas las cuentas en el tablero están en la canasta.
Claramente, hay muchas tablas que no se pueden ganar, como si hubiera exactamente una cuenta en la segunda copa. No hay jugadas legales porque no se pueden sembrar todas las copas con 0 cuentas, y la segunda copa no tiene suficientes cuentas para sembrar. Obviamente, esto no es divertido, por lo que su tarea será crear tableros ganables.
Tarea
Dado un número entero positivo que representa una cantidad de cuentas, se obtiene una lista de números enteros no negativos que representan la cantidad de cuentas que se deben colocar en cada taza para formar un tablero que se pueda ganar como se describió anteriormente. Esta lista no debe contener ceros finales.
Para cualquier número de cuentas, siempre hay exactamente una configuración de tablero que se puede ganar.
Demostración
Esta es una demostración de cómo jugar el tablero ganable y la entrada de 4. El tablero ganable es [0, 1, 3]
. Comenzamos con el único movimiento disponible, sembrando las cuentas de la tercera copa para obtener [1, 2, 0]
. Ahora tenemos realmente una opción, pero la única correcta es la siembra de la primera taza, consiguiendo: [0, 2, 0]
. Luego sembramos la segunda copa [1, 0, 0]
y finalmente sembramos la primera copa nuevamente para obtener todas las tazas vacías.
Casos de prueba:
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]
¡ Muchas gracias a PeterTaylor por crear un programa para generar casos de prueba!