Forse ci sono, mettevo troppe condizioni di somme
Sub Main()
Dim r1, r2, p1, p2, p3, p4
Dim n, a, b, c, d, s1, s2, s3, s4, s5, s6
Dim e1(5), e2(5) ' Array per velocizzare la lettura degli estratti
For n = 127 To EstrazioneFin
AvanzamentoElab 127, EstrazioneFin, n
For r1 = 1 To 10 ' Analisi ruote principali
' Caricamento rapido estratti ruota 1
For p1 = 1 To 5 : e1(p1) = Estratto(n, r1, p1) : Next
For p1 = 1 To 4
For p2 = p1 + 1 To 5
a = e1(p1) : b = e1(p2)
If a > 0 Then
s1 = Fuori90(a + b)
For r2 = r1 + 1 To 12
If r2 = 11 Then r2 = 12 ' Salta Tutte, vai a Nazionale
' Caricamento rapido estratti ruota 2
For p3 = 1 To 5 : e2(p3) = Estratto(n, r2, p3) : Next
For p3 = 1 To 4
For p4 = p3 + 1 To 5
c = e2(p3) : d = e2(p4)
If c > 0 Then
' --- OTTIMIZZAZIONE: Calcolo somme solo se necessario ---
' CASO 1: ORIZZONTALE
If Distanza(a, b) = 30 And Distanza(c, d) = 30 Then
s3 = Fuori90(a + c) : s4 = Fuori90(b + d)
If s3 = 90 And s4 = 90 Then
Call Stampa(n, r1, r2, a, b, c, d, "ORIZZONTALE", 30, 90)
End If
' CASO 2: VERTICALE
ElseIf Distanza(a, c) = 30 And Distanza(b, d) = 30 Then
s2 = Fuori90(c + d)
If s1 = 90 And s2 = 90 Then
Call Stampa(n, r1, r2, a, b, c, d, "VERTICALE", 30, 90)
End If
' CASO 3: DIAGONALE
ElseIf Distanza(a, d) = 30 And Distanza(b, c) = 30 Then
s3 = Fuori90(a + c) : s4 = Fuori90(b + d)
If s3 = 90 And s4 = 90 Then
Call Stampa(n, r1, r2, a, b, c, d, "DIAGONALE", 30, 90)
End If
End If
End If
Next 'p4
Next 'p3
Next 'r2
End If
Next 'p2
Next 'p1
Next 'r1
If ScriptInterrotto Then Exit For
Next 'n
End Sub
' Sub routine di stampa per pulire il codice principale
Sub Stampa(n, r1, r2, a, b, c, d, tipo, dist, som)
Scrivi String(40, "=") & " " & tipo
Scrivi n & " " & DataEstrazione
& " " & NomeRuota(r1) & " [" & a & "-" & b & "]"
Scrivi n & " " & DataEstrazione
& " " & NomeRuota(r2) & " [" & c & "-" & d & "]"
Scrivi "Distanza rilevata: " & dist & " | Somma 90 verificata"
Scrivi String(50, "-")
End Sub
Sub Main()
Dim r1, r2, p1, p2, p3, p4
Dim n, a, b, c, d, s1, s2, s3, s4, s5, s6
Dim e1(5), e2(5) ' Array per velocizzare la lettura degli estratti
For n = 127 To EstrazioneFin
AvanzamentoElab 127, EstrazioneFin, n
For r1 = 1 To 10 ' Analisi ruote principali
' Caricamento rapido estratti ruota 1
For p1 = 1 To 5 : e1(p1) = Estratto(n, r1, p1) : Next
For p1 = 1 To 4
For p2 = p1 + 1 To 5
a = e1(p1) : b = e1(p2)
If a > 0 Then
s1 = Fuori90(a + b)
For r2 = r1 + 1 To 12
If r2 = 11 Then r2 = 12 ' Salta Tutte, vai a Nazionale
' Caricamento rapido estratti ruota 2
For p3 = 1 To 5 : e2(p3) = Estratto(n, r2, p3) : Next
For p3 = 1 To 4
For p4 = p3 + 1 To 5
c = e2(p3) : d = e2(p4)
If c > 0 Then
' --- OTTIMIZZAZIONE: Calcolo somme solo se necessario ---
' CASO 1: ORIZZONTALE
If Distanza(a, b) = 30 And Distanza(c, d) = 30 Then
s3 = Fuori90(a + c) : s4 = Fuori90(b + d)
If s3 = 90 And s4 = 90 Then
Call Stampa(n, r1, r2, a, b, c, d, "ORIZZONTALE", 30, 90)
End If
' CASO 2: VERTICALE
ElseIf Distanza(a, c) = 30 And Distanza(b, d) = 30 Then
s2 = Fuori90(c + d)
If s1 = 90 And s2 = 90 Then
Call Stampa(n, r1, r2, a, b, c, d, "VERTICALE", 30, 90)
End If
' CASO 3: DIAGONALE
ElseIf Distanza(a, d) = 30 And Distanza(b, c) = 30 Then
s3 = Fuori90(a + c) : s4 = Fuori90(b + d)
If s3 = 90 And s4 = 90 Then
Call Stampa(n, r1, r2, a, b, c, d, "DIAGONALE", 30, 90)
End If
End If
End If
Next 'p4
Next 'p3
Next 'r2
End If
Next 'p2
Next 'p1
Next 'r1
If ScriptInterrotto Then Exit For
Next 'n
End Sub
' Sub routine di stampa per pulire il codice principale
Sub Stampa(n, r1, r2, a, b, c, d, tipo, dist, som)
Scrivi String(40, "=") & " " & tipo
Scrivi n & " " & DataEstrazione
Scrivi n & " " & DataEstrazione
Scrivi "Distanza rilevata: " & dist & " | Somma 90 verificata"
Scrivi String(50, "-")
End Sub