Ci sono altre divergenze. Ora il programma crea un file html e un altro programma confronta questo html con quello generato da Visual Lotto
Quello che vedi è il risultato, in giallo l'estrazione con un estratto diverso e in rosso le differenze nel conteggio delle vincite. Tutte a -2 potrebbe essere un errore del programma. Ora la AI sta provando
-----------------------------------------------------------------------------------------------------
Trovato! Non è un bug di "loop che salta 2 ruote" — è un problema di
definizione di "vincite". Guarda questo dettaglio nell'header che mi hai appena mandato, dentro ContaPresenzePerRiga:
cpp
<span>// PONDERAZIONE: ogni riga con hit >= soglia numeri della formazione pesa</span><br><span>// Combinazioni(hit, soglia), non 1 - perche' contiene quel numero di</span><br><span>// ambi/terni distinti della formazione</span><br><span>if</span> <span>(</span>hit >= soglia<span>)</span> cnt += <span>Combinazioni</span><span>(</span>hit<span>,</span> soglia<span>);</span>
Questa regola (già corretta altrove nel tuo codice)
non viene applicata nel loop di DiagStoricoEsiti.cpp, che invece fa semplicemente vincite++ per ogni riga/ruota che soddisfa la soglia — 1 punto a prescindere da quanti numeri della formazione siano usciti insieme.
La formazione ha 4 numeri (53,13,3,22), sorte Ambo. Se su una singola ruota escono
3 di questi 4 numeri insieme (un "terno interno" alla formazione), quella riga contiene
C(3,2) = 3 ambi distinti, non 1. Il tuo loop la conta comunque come 1 sola vincita → differenza di
esattamente 2, sempre, ovunque capiti un terno interno su una singola ruota.
Verifica sui tuoi dati: il caso 2005/09/17 (MI,PA,RM, vincite_VL=5, mio tool=3) torna perfettamente se una delle tre ruote ha avuto un terno interno (vale 3) e le altre due un ambo singolo (1+1): 3+1+1=5. Il caso 1961/03/11 (BA,CA, vincite_VL=4, mio tool=2) torna se una ruota ha ambo singolo (1) e l'altra terno interno (3): 1+3=4. E tutti gli altri 19 casi con "una sola ruota, 3→1" sono semplicemente un terno interno su quell'unica ruota (C(3,2)=3, contato come 1). Combacia con
tutti e 21 i mismatch, senza eccezioni — da qui la costanza del "-2".
Correzione (sostituisci il blocco che ricrea il Concorso{...} temporaneo):
Eseguito un comand
Hai esaurito i
messaggi gratuiti fino alle 18:40
Porca vacca (speriamo che il bue non senta) è finito il tempo. Proprio quando mi stava dando la correzione
Va buono. Ho risolta con Chatgdp:

dice due divergenze ma sono la stessa in Visual basic manca una data (perché le estrazioni di Cagliari sono diverse) e nel mio programma c'è una data in più. Va bene per ora anche se due divergenze non è corretto la lascio, poi vedremo.
Ora vado a provare in Linux