Ho un mucchio di calzini puliti che voglio ordinare in coppia. Sfortunatamente, posso prendere solo i calzini da entrambe le estremità della pila, non dal centro. Inoltre, posso solo rimuovere un paio di calzini dalla pila alla volta. La mia strategia è prima di dividere il mucchio in una o più pile più piccole. Penso che alcuni esempi lo chiariranno. Rappresenterò ogni calzino come intero positivo (numeri interi corrispondenti indicano calzini uguali).
Se la pila iniziale di calze è
1 2 3 3 2 1
quindi non devo fare alcuna scissione. Posso rimuovere entrambe le 1calze, quindi entrambe le 2calze, quindi entrambe le 3calze.
Se invece la pila iniziale è
1 2 3 2 3 1
quindi devo prima dividerlo perché non sarò in grado di accoppiare tutti i calzini semplicemente rimuovendoli dall'estremità. Una possibilità è di dividerlo in due pile
1 2 3 and 2 3 1
Ora posso rimuovere i 1calzini, lasciando 2 3 and 2 3, seguiti dai 3calzini, lasciando 2 and 2, e infine i 2calzini.
Il tuo lavoro
Data la pila iniziale di calze, scrivi un programma che lo dividerà in pile più piccole che mi permetteranno di ordinare le calze. Il tuo programma dovrebbe dividere il mucchio nel minor numero possibile di pile (se ci sono più soluzioni migliori, devi solo trovarne una).
L'input verrà fornito come elenco, stringa delimitata o altra forma conveniente. Conterrà solo numeri interi tra 1e un valore massimo n, con ogni numero intero che si verifica esattamente due volte.
L'output dovrebbe essere costituito dall'elenco di input suddiviso in elenchi più piccoli, fornito in qualsiasi forma conveniente.
Esempi
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
Si noti che questo non è l'unico output consentito per la maggior parte di questi input. Per il secondo caso, ad esempio, le uscite 1 2; 1 2o 1 2 1; 2sarebbero anche accettate.
Grazie a Sp3000 per alcuni suggerimenti di prova!
Odio passare molto tempo a sistemare i miei vestiti, quindi abbassa il codice il più possibile. Vince la risposta più breve in byte!
Gli appunti
- Non voglio guardare dietro un calzino per vedere se la sua coppia abbinata è lì, quindi non è permesso prendere entrambi i calzini in un paio dalla stessa estremità. Ad esempio, se la pila è
1 1 2 2allora non saresti in grado di lasciarla come una pila e prendere entrambe le1calze dall'estremità sinistra.
123213potrebbe essere suddiviso in 1; 23; 213( 1; 23; 213-> 1; 2; 21-> ; 2; 2)?
123213usando solo due pile, la tua risposta dovrebbe dare una delle divisioni a due pile.