Paciência búlgaro é um jogo single-player popularizado por Martin Gardner em sua coluna matemática na Scientific American .
Você tem N
cartões idênticos, divididos em pilhas. Você pega uma carta de cada pilha e forma uma nova pilha com as cartas removidas. Você repete esse processo até chegar a um estado que já viu e, assim, continuar repetindo o loop.
Por exemplo, digamos que você tenha 8
cartas, divida em uma pilha de 5
e uma pilha de 3
. Nós escrevemos os tamanhos pilha em ordem decrescente: 5 3
. Aqui está uma transcrição do jogo:
5 3
4 2 2
3 3 1 1
4 2 2
Você primeiro remove um cartão de cada uma das duas pilhas, deixando pilhas de 4
e 2
, e uma pilha recém-criada de 2
doações 4 2 2
. Na próxima etapa, elas diminuem para 3 1 1
seguidas com uma nova pilha de 3
. Finalmente, o último passo esvazia as pilhas de tamanho 1
e produz o 4 2 2
que já apareceu, então paramos.
Observe que a soma dos tamanhos das pilhas permanece a mesma.
Seu objetivo é imprimir uma transcrição do jogo a partir de uma determinada configuração inicial. Isso é código de golfe, e o menor número de bytes vence.
Entrada
Uma lista de números positivos em ordem decrescente que representa os tamanhos de pilha iniciais. Receber entrada via STDIN ou entrada de função. Você pode usar qualquer estrutura de lista que desejar.
Você não recebe o número total de cartões N
como entrada.
Resultado
Imprima a sequência de tamanhos de pilha que o jogo de Paciência Búlgaro passa. Observe que a impressão é necessária, não retornando. Cada etapa deve ter sua própria linha.
Cada linha deve ter uma sequência de números positivos em ordem decrescente, sem números 0
. Você pode ter separadores e tokens de início e de término (por exemplo [3, 3, 1, 1]
). Os números podem ter vários dígitos, portanto devem ser separados de alguma forma.
Imprima as divisões de tamanho de pilha que você vê até incluir uma repetição. Portanto, a primeira linha deve ser a entrada e a última linha deve ser uma repetição de uma linha anterior. Não deve haver outras repetições.
Casos de teste
>> [1]
1
1
>> [2]
2
1 1
2
>> [1, 1, 1, 1, 1, 1, 1]
1 1 1 1 1 1 1
7
6 1
5 2
4 2 1
3 3 1
3 2 2
3 2 1 1
4 2 1
>> [5, 3]
5 3
4 2 2
3 3 1 1
4 2 2
>> [3, 2, 1]
3 2 1
3 2 1
>> [4, 4, 3, 2, 1]
4 4 3 2 1
5 3 3 2 1
5 4 2 2 1
5 4 3 1 1
5 4 3 2
4 4 3 2 1
v$input()$
porQ
. 2. Se você armazena a lista em ordem decrescente, não precisaN
:W!}QYQ~Y]Q=Q_S+fTmtdQ]lQ;Q