Ho una lista di dimensioni variabili, per esempiodividere una lista in due elenchi secondari in tutti i modi possibili
[1, 2, 3, 4]
e voglio ottenere ogni modo possibile per dividere questa lista in due:
([], [1, 2, 3, 4])
([1], [2, 3, 4])
([2], [1, 3, 4])
([3], [1, 2, 4])
([4], [1, 2, 3])
([1, 2], [3, 4])
([1, 3], [2, 4])
([1, 4], [2, 3])
([2, 3], [1, 4])
([2, 4], [1, 3])
([3, 4], [1, 2])
([1, 2, 3], [4])
([1, 2, 4], [3])
([1, 3, 4], [2])
([2, 3, 4], [1])
([1, 2, 3, 4], [])
Sono abbastanza sicuro che questo non è un problema sconosciuto e probabilmente c'è un algoritmo per questo, ma non sono riuscito a trovarne uno. Inoltre, questo non dovrebbe utilizzare alcuna libreria esterna, ma lavorare con caratteristiche linguistiche semplici (cicli, condizioni, metodi/funzioni, variabili, ...) presenti nella maggior parte delle lingue.
Ho scritto una soluzione hackish in Python:
def get_all(objects):
for i in range(1, len(objects)):
for a in combinations(objects, i):
for b in combinations([obj for obj in objects if obj not in up], len(objects) - i):
yield State(up, down)
if objects:
yield State([], objects)
yield State(objects, [])
Tuttavia, utilizza funzioni di libreria e non è molto bello guardare in generale.
Non scriviamo il codice qui. Aiutiamo le persone ad arrivare alle loro soluzioni. Devi mostrarci degli sforzi per questo. –
Ho scritto una soluzione hacker in Python. – LeoTietz
Dovresti postarlo. – Brionius