J'ai un tas de chaussettes propres que je veux trier par paires. Malheureusement, je ne peux prendre que des chaussettes aux deux extrémités de la pile, pas au milieu. De plus, je ne peux retirer des chaussettes de la pile qu'une paire assortie à la fois. Ma stratégie consiste à diviser d'abord la pile en une ou plusieurs piles plus petites. Je pense que certains exemples le montreront clairement. Je vais représenter chaque chaussette comme un entier positif (les entiers correspondants indiquent des chaussettes égales).
Si le premier tas de chaussettes est
1 2 3 3 2 1
alors je n'ai pas à faire de fractionnement. Je peux retirer les deux 1chaussettes, puis les deux 2chaussettes, puis les deux 3chaussettes.
Si à la place la pile initiale est
1 2 3 2 3 1
ensuite je dois le diviser d'abord parce que je ne pourrai pas associer toutes les chaussettes en les retirant simplement de la fin. Une possibilité est de le diviser en deux piles
1 2 3 and 2 3 1
Maintenant, je peux retirer les 1chaussettes en partant 2 3 and 2 3, puis les 3chaussettes en partant 2 and 2et enfin les 2chaussettes.
Votre travail
Compte tenu de la pile initiale de chaussettes, écrivez un programme qui la divisera en piles plus petites qui me permettront de trier les chaussettes. Votre programme doit diviser la pile en le moins de piles possible (s'il existe plusieurs meilleures solutions, il vous suffit d'en trouver une).
L'entrée sera donnée sous forme de liste, chaîne délimitée ou autre forme pratique. Il ne contiendra que des entiers compris entre 1une valeur maximale net chaque entier se produisant exactement deux fois.
La sortie doit consister en la liste d'entrée divisée en listes plus petites, données sous n'importe quelle forme pratique.
Exemples
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
Notez que ce n'est pas la seule sortie autorisée pour la plupart de ces entrées. Pour le deuxième cas, par exemple, les sorties 1 2; 1 2ou 1 2 1; 2seraient également acceptées.
Merci à Sp3000 pour quelques suggestions de tests!
Je déteste passer beaucoup de temps à trier mes vêtements, alors faites votre code aussi court que possible. La réponse la plus courte en octets gagne!
Remarques
- Je ne veux pas avoir à regarder derrière une chaussette pour voir si sa paire assortie est là, donc prendre les deux chaussettes dans une paire du même bout n'est pas autorisé. Par exemple, si la pile est
1 1 2 2alors vous ne pourriez pas la laisser comme une seule pile et prendre les deux1chaussettes de l'extrémité gauche.
123213pourrait être divisé en 1; 23; 213( 1; 23; 213-> 1; 2; 21-> ; 2; 2)?
123213utilisant seulement deux piles, votre réponse devrait donner l'une des divisions en deux piles.