Eu tenho uma pilha de meias limpas que quero separar em pares. Infelizmente, só posso tirar meias de cada extremidade da pilha, não do meio. Além disso, só posso remover da pilha um par correspondente de cada vez. Minha estratégia é primeiro dividir a pilha em uma ou mais pilhas menores. Eu acho que alguns exemplos deixarão isso claro. Vou representar cada meia como um número inteiro positivo (números inteiros correspondentes indicam meias iguais).
Se a pilha inicial de meias for
1 2 3 3 2 1
então não preciso fazer nenhuma divisão. Posso remover as duas 1
meias, depois as duas 2
meias e as duas 3
meias.
Se, em vez disso, a pilha inicial for
1 2 3 2 3 1
então eu tenho que dividi-lo primeiro porque não poderei emparelhar todas as meias apenas removendo-as do final. Uma possibilidade é dividi-lo em duas pilhas
1 2 3 and 2 3 1
Agora posso remover as 1
meias, saindo 2 3 and 2 3
, seguidas pelas 3
meias, saindo 2 and 2
e, finalmente, as 2
meias.
Seu emprego
Dada a pilha inicial de meias, escreva um programa que o divida em pilhas menores que me permitam classificar as meias. Seu programa deve dividir a pilha no menor número possível de pilhas (se houver várias melhores soluções, você precisará encontrar apenas uma).
A entrada será fornecida como uma lista, sequência delimitada ou outra forma conveniente. Ele conterá apenas números inteiros entre 1
e algum valor máximo n
, com cada número inteiro ocorrendo exatamente duas vezes.
A saída deve consistir na lista de entrada dividida em listas menores, fornecidas de qualquer forma conveniente.
Exemplos
Input Sample Output
1 1 1 1
1 2 1 2 1; 2 1 2
1 3 2 4 3 2 1 4 1 3 2; 4 3 2 1 4
1 2 3 4 3 4 1 2 1; 2 3; 4 3 4 1 2
1 1 2 2 3 3 1 1 2; 2 3 3
4 3 4 2 2 1 1 3 4 3 4 2; 2 1 1 3
Observe que essa não é a única saída permitida para a maioria dessas entradas. Para o segundo caso, por exemplo, as saídas 1 2; 1 2
ou 1 2 1; 2
também seriam aceitas.
Obrigado ao Sp3000 por algumas sugestões de teste!
Eu odeio gastar muito tempo escolhendo minhas roupas, então faça seu código o mais curto possível. Menor resposta em bytes ganha!
Notas
- Não quero ter que olhar atrás de uma meia para ver se o par correspondente está lá; portanto, não é permitido usar as duas meias do mesmo lado. Por exemplo, se a pilha estiver
1 1 2 2
, você não poderá deixá-la como uma pilha e tirar as duas1
meias da extremidade esquerda.
123213
poderia ser dividido em 1; 23; 213
( 1; 23; 213
-> 1; 2; 21
-> ; 2; 2
)?
123213
usando apenas duas pilhas, sua resposta teria que dar uma das divisões de duas pilhas.