memorizzando le mosse nella matrice ArrayTestMosse.
Ripristino lo stato iniziale
eseguo il tentativo 2, con mosse diverse
Ripristino lo stato iniziale
eseguo il tentativo 3, con mosse diverse
Ripristino lo stato iniziale
eseguo il tentativo 4, con mosse diverse
Ripristino lo stato iniziale
eseguo il tentativo 5, con mosse diverse
Ripristino lo stato iniziale
I 5 tentativi producono disposizioni distinte
Eseguo una valutazione sul punteggio
Scelgo il tentativo migliore, lo inserisco nella matrice principale e visualizzo.
con questo sistema si raggiunge 1024 nel 50% dei casi, ma è solo la partenza.
Cosa manca, che potrebbe migliorare la situazione?
In parte lo avevo già fatto nella mia precedente autosoluzione, che raggiunge un 1024 insieme a un 512, nel 50% dei casi
1) la valutazione quando lo schema non è pieno, va fatta sulle caselle vuote, con un ordine di priorità lati centro
Vecchio codice:
Codice sorgente - presumibilmente VB.NET |
Function calcolaVuoti() As Integer Dim calcolaV As Integer Dim VuotiAttuali As Integer For calcolaV = 1 To 4 If Matrice4x4(calcolaV, 1) = 1 Then VuotiAttuali += 1 If Matrice4x4(calcolaV, 2) = 1 Then VuotiAttuali += 1 If Matrice4x4(calcolaV, 3) = 1 Then VuotiAttuali += 1 If Matrice4x4(calcolaV, 4) = 1 Then VuotiAttuali += 1 Next Debug. Print("VuotiTotali" & VuotiAttuali ) Return VuotiAttuali End Function Function calcolaVuotiLato() As Integer Dim calcolaV As Integer Dim VuotiAttuali As Integer For calcolaV = 1 To 2 If Matrice4x4(calcolaV, 1) = 1 Then VuotiAttuali += 1 'If Matrice4x4(calcolaV, 2) = 1 Then VuotiAttuali += 1 ' If Matrice4x4(calcolaV, 3) = 1 Then VuotiAttuali += 1 If Matrice4x4(calcolaV, 4) = 1 Then VuotiAttuali += 1 Next Debug. Print("VuotiLato" & VuotiAttuali ) Return VuotiAttuali End Function Function calcolaVuotiCentro() As Integer Dim calcolaV As Integer Dim VuotiAttuali As Integer For calcolaV = 1 To 2 'If Matrice4x4(calcolaV, 1) = 1 Then VuotiAttuali += 1 If Matrice4x4(calcolaV, 2) = 1 Then VuotiAttuali += 1 If Matrice4x4(calcolaV, 3) = 1 Then VuotiAttuali += 1 'If Matrice4x4(calcolaV, 4) = 1 Then VuotiAttuali += 1 Next Debug. Print("VuotiCentro" & VuotiAttuali ) Return VuotiAttuali End Function
|
2) Quando i vuoti sono in pareggio, la valutazione punteggio va fatta prediligendo le soluzioni che hanno una sequanza progressiva a serpente, nelle ultime due righe:
00 00 00 00
00 00 00 00
12 11 10 09
13 14 15 16
3) Analisi dello schema che intercetta mosse a cui non si può rinunciare (alcune lo ho scritte)
4) Analisi dello schema che intercetta mosse da evitare (alcune lo ho scritte)
Si può provare con tentativi con più mosse per volta, ma finquando non si ottimizzano i punti 3 e 4 è inutile poichè, anche se lo schema lo esegui centinaia di volte fino alla fine, sempre che a 2048, non ci arrivi
Se invece si riesce ad arrivare a 2048 anche solo nel 5% 10% dei casi, con il brute force poi lo porti al 100%
Ultima modifica effettuata da Carlo il 22/06/2018 alle 16:31
in programmazione tutto è permesso