Allora.. visto che non posso condividere il codice vi spiego il mio ragionamento nella speranza che qualcuno illumini il mio cammino.
Per prima cosa ho creato una funzione ausiliaria per trovare tutte le coppie di caratteri (o meglio gli indici)
# Per ['1','2','0','1','0','0','1'] mi da [[0, 3], [0, 6], [2, 4], [2, 5], [3, 6], [4, 5]] ovvero la lista di tutti gli indici di coppie uguali di caratteri
Poi ho creato un altra funzione ausiliaria, che data una lista ed una lista di indici, ritorna la lista senza i caratteri in quegli indici
# esempio(['1','2','3','4','5'],[2,4]) = ['1','2','4']
Poi ho scritto la funzione ex1 ricorsiva..
Per prima cosa se s è una stringa la trasformo in una lista facendo uno split sugli spazi (così evito di controllare le coppie di spazi e ho elementi 'puliti' nel caso in cui nei test ci siano numeri di due cifre)
Poi creo un set vuoto
Poi calcolo le coppie con la funzione di prima e le metto in una variabile
Poi controllo che questa variabile delle coppie sia uguale ad una lista vuota (in questo caso vuol dire che sono in una foglia perchè la mia funzione non ha trovato coppie)... nel caso ritorno la lista s riconvertita in stringa (' '.join(s))
Altrimenti se ci sono coppie vuol dire che sono in un nodo, quindi faccio un ciclo sulle coppie, e per ogni coppia, riuso la funzione ex1 ricorsivamente sulla stringa ottenuta eliminando quella coppia dalla stringa, e salvo il risultato in una variabile X
Se x non è un set lo aggiungo al set che ho creato prima, e poi fuori dal ciclo ritorno questo set
Il mio imputtanamento è da queste parti, perchè a volte x è una foglia, a volte x è il set che dovrei ritornare alla fine, perchè giustamente dipende dal if all'inizio quale return verrà utilizzato, a me servirebbe un illuminazione per capire come gestire questo set che mi sembra venga sovrascritto..per spiegarmi meglio allego il log della console dove uso rtrace e ci piazzo una stampa della x in mezzo ( e in fondo invece trovate tutte le x in successione)
Come potete notare esiste un momento nello spaziotempo in cui il mio set esiste e contiene ciò che deve contenere, ma alla fine per me c'è solo un triste set vuoto.
E' da un po che ci provo ma sto perdendo lentamente la mia sanità mentale quindi sarebbe molto gradita una mano che faccia luce sull'errore che sto ignorando. Grazie
------------------- Starting recursion -------------------
entering ex1('1 2 0 1 0 0 1',)
|-- entering ex1(['2', '0', '0', '0', '1'],)
|--|-- entering ex1(['2', '0', '1'],)
|--|-- exiting ex1(['2', '0', '1'],) returns 2 0 1
x= 2 0 1
|--|-- entering ex1(['2', '0', '1'],)
|--|-- exiting ex1(['2', '0', '1'],) returns 2 0 1
x= 2 0 1
|--|-- entering ex1(['2', '0', '1'],)
|--|-- exiting ex1(['2', '0', '1'],) returns 2 0 1
x= 2 0 1
|-- exiting ex1(['2', '0', '0', '0', '1'],) returns {'2 0 1'}
x= {'2 0 1'}
|-- entering ex1(['2', '0', '1', '0', '0'],)
|--|-- entering ex1(['2', '1', '0'],)
|--|-- exiting ex1(['2', '1', '0'],) returns 2 1 0
x= 2 1 0
|--|-- entering ex1(['2', '1', '0'],)
|--|-- exiting ex1(['2', '1', '0'],) returns 2 1 0
x= 2 1 0
|--|-- entering ex1(['2', '0', '1'],)
|--|-- exiting ex1(['2', '0', '1'],) returns 2 0 1
x= 2 0 1
|-- exiting ex1(['2', '0', '1', '0', '0'],) returns {'2 1 0', '2 0 1'}
x= {'2 1 0', '2 0 1'}
|-- entering ex1(['1', '2', '1', '0', '1'],)
|--|-- entering ex1(['2', '0', '1'],)
|--|-- exiting ex1(['2', '0', '1'],) returns 2 0 1
x= 2 0 1
|--|-- entering ex1(['2', '1', '0'],)
|--|-- exiting ex1(['2', '1', '0'],) returns 2 1 0
x= 2 1 0
|--|-- entering ex1(['1', '2', '0'],)
|--|-- exiting ex1(['1', '2', '0'],) returns 1 2 0
x= 1 2 0
|-- exiting ex1(['1', '2', '1', '0', '1'],) returns {'2 1 0', '2 0 1', '1 2 0'}
x= {'2 1 0', '2 0 1', '1 2 0'}
|-- entering ex1(['1', '2', '1', '0', '1'],)
|--|-- entering ex1(['2', '0', '1'],)
|--|-- exiting ex1(['2', '0', '1'],) returns 2 0 1
x= 2 0 1
|--|-- entering ex1(['2', '1', '0'],)
|--|-- exiting ex1(['2', '1', '0'],) returns 2 1 0
x= 2 1 0
|--|-- entering ex1(['1', '2', '0'],)
|--|-- exiting ex1(['1', '2', '0'],) returns 1 2 0
x= 1 2 0
|-- exiting ex1(['1', '2', '1', '0', '1'],) returns {'2 1 0', '2 0 1', '1 2 0'}
x= {'2 1 0', '2 0 1', '1 2 0'}
|-- entering ex1(['1', '2', '0', '0', '0'],)
|--|-- entering ex1(['1', '2', '0'],)
|--|-- exiting ex1(['1', '2', '0'],) returns 1 2 0
x= 1 2 0
|--|-- entering ex1(['1', '2', '0'],)
|--|-- exiting ex1(['1', '2', '0'],) returns 1 2 0
x= 1 2 0
|--|-- entering ex1(['1', '2', '0'],)
|--|-- exiting ex1(['1', '2', '0'],) returns 1 2 0
x= 1 2 0
|-- exiting ex1(['1', '2', '0', '0', '0'],) returns {'1 2 0'}
x= {'1 2 0'}
|-- entering ex1(['1', '2', '0', '1', '1'],)
|--|-- entering ex1(['2', '0', '1'],)
|--|-- exiting ex1(['2', '0', '1'],) returns 2 0 1
x= 2 0 1
|--|-- entering ex1(['2', '0', '1'],)
|--|-- exiting ex1(['2', '0', '1'],) returns 2 0 1
x= 2 0 1
|--|-- entering ex1(['1', '2', '0'],)
|--|-- exiting ex1(['1', '2', '0'],) returns 1 2 0
x= 1 2 0
|-- exiting ex1(['1', '2', '0', '1', '1'],) returns {'2 0 1', '1 2 0'}
x= {'2 0 1', '1 2 0'}
exiting ex1('1 2 0 1 0 0 1',) returns set()
-------------------- Ending recursion --------------------
Num calls: 25
set()
x= 2 0 1
x= 2 0 1
x= 2 0 1
x= {'2 0 1'}
x= 2 1 0
x= 2 1 0
x= 2 0 1
x= {'2 1 0', '2 0 1'}
x= 2 0 1
x= 2 1 0
x= 1 2 0
x= {'2 1 0', '2 0 1', '1 2 0'}
x= 2 0 1
x= 2 1 0
x= 1 2 0
x= {'2 1 0', '2 0 1', '1 2 0'}
x= 1 2 0
x= 1 2 0
x= 1 2 0
x= {'1 2 0'}
x= 2 0 1
x= 2 0 1
x= 1 2 0
x= {'2 0 1', '1 2 0'}
set()