Ciao, io l'ho risolto creando inizialmente un albero con tutti i codici possibili (che rappresenta tutte le possibili soluzioni), poi dopo il primo indizio creo due nuovi alberi, uno supponendo che l'indizio sia del tipo (a,b) non invertito, e l'altro supponendo che l'indizio sia (b,a), in cui scarto tutti i codici non compatibili con l'indizio. Poi negli step successivi riapplico la procedura su ogni albero creato nel passo precedente, il numero di alberi (corrispondenti a tutti i "mondi" possibili) potenzialmente può raddoppiare ad ogni passo, ma alla fine la cosa non è così grave, perchè ad ogni passo il numero di elementi rimasti in ogni lista diminuisce molto più velocemente dell'aumento del numero degli alberi, soprattutto negli alberi in cui le supposizioni sull'inversione risultano sbagliate, l'incoerenza negli indizi porta molto in fretta al loro collasso, restano senza elementi e possono essere scartati.
Ho scelto il codice da usare come scommessa tra uno a caso degli alberi rimasti come soluzioni, però preferendo gli alberi con più elementi, ipotizzando che sia più probabile che corrisponda al mondo "giusto". Una volta scelto l'albero, ho scelto un codice a caso, non è una scelta ottimale, idealmente si dovrebbe scegliere il codice che consente di scartare il maggior numero di codici nel caso peggiore, però ero già troppo tirato coi tempi, non ho neanche provato a implementare la cosa.
Come ottimizzazione ulteriore al primo step ho pensato che fosse più probabile che l'albero corretto sia quello costruito sull'ipotesi in cui il numero di cifre indovinate al posto sbagliato sia molto superiore al numero di cifre al posto giusto (ad esempio di solito la prima risposta è qualcosa come (1,6) o (6,1), ci vorrebbe un sedere come il Colosseo per indovinare 6 cifre al posto giusto al primo tentativo), e quindi davo priorità a questo albero e ai suoi figli nella scelta della seconda puntata, ma sono convinto che questa ottimizzazione sia stata totalmente inutile, per i primi tentativi non penso sia un problema puntare codici sbagliati, e poi la tabella "sbagliata" creata nel primo tentativo si azzera in fretta.
Con questo approccio ho indovinato 16 codici con 135 tentativi, ero molto tirato coi tempi di esecuzione, c'è chi ha avuto approcci più efficaci