Sono interessato a inventare un algoritmo per risolvere un gioco di ipotesi. Il giocatore sta tentando di indovinare una sequenza di 4 numeri univoci da 1 a 9. Dopo un'ipotesi, viene loro indicato quanti numeri della loro ipotesi sono corretti e nella posizione corretta e quanti sono corretti e nella posizione sbagliata.
L'approccio che sto prendendo è quello di avere una raccolta iniziale di tutte le possibili ipotesi e una raccolta di tutti i numeri possibili. La raccolta di ipotesi è usata per dare al giocatore un'idea di tutte le ipotesi valide rimanenti. La raccolta di numeri memorizza le informazioni su ciascuna cifra:
- se è sicuramente presente o no, e
- in quale posizione è decisamente dentro o sicuramente non presente.
Quindi, dato che al giocatore vengono dati altri indizi, rimuovo tutte le ipotesi che devono essere non valide e aggiorna le ipotesi sulle cifre. L'idea è che, dopo un certo numero di tentativi, l'algoritmo dovrebbe continuare a migliorare le probabilità di scegliere la sequenza corretta.
Voglio completare il processo di eliminazione degli elementi dall'elenco e fare ipotesi sulle cifre creando regole. Ogni volta che vengono soddisfatte le condizioni di una regola, la raccolta di numeri e / o la raccolta di congetture devono essere aggiornate. Le regole dovrebbero includere:
- se l'ipotesi corrente non ha numeri nella posizione corretta, tutti i numeri nella sequenza non sono sicuramente nella posizione corrente,
- se sono presenti 4 numeri nella sequenza, allora tutte le ipotesi senza tutti e 4 questi numeri non sono valide,
- se due ipotesi hanno 8 numeri univoci tra loro e la somma dei numeri presenti è solo 3, quindi la nona cifra indovinata è sicuramente presente,
- ecc.
Mi piace l'idea che io, come sviluppatore, possa continuare ad aggiungere regole mentre scopro schemi che non ho notato (o che non sono stato in grado di formalizzare) senza troppi problemi. Il problema sta nell'implementazione.
Esiste un modello di programmazione che mi consente di creare un insieme di regole estendibili per testare e reagire a?