Follow along with the video below to see how to install our site as a web app on your home screen.
Nota: This feature may not be available in some browsers.
"""
BIAMBI CON RITARDO MASSIMO STORICO <= SOGLIA + RITARDO ATTUALE
===============================================================
Modifiche rispetto alla versione precedente:
- 11 ruote (inclusa la Nazionale)
- Ricerca parte dall'estrazione con ID = 8117
"""
import os
import sys
import time
import numpy as np
from itertools import combinations
ARCHIVIO = r"C:\Users\HP\AppData\Roaming\spaziometria\ArcTlv\Archivio.txt"
OUTPUT = r"C:\Users\HP\Desktop\biambi_sotto79.txt"
SOGLIA = 100
ID_INIZIO = 8117 # prima estrazione da considerare (1-based)
NUM_RUOTE = 11 # tutte e 11 le ruote inclusa Nazionale
NUM_ESTRATTI = 5
NUM_AMBI = 4005
NUM_COPPIE = 8_018_010
COMBO_5_2 = list(combinations(range(NUM_ESTRATTI), 2))
NOMI_RUOTE = [
"Bari","Cagliari","Firenze","Genova","Milano",
"Napoli","Palermo","Roma","Torino","Venezia","Nazionale"
]
def ambo_idx(a, b):
if a > b: a, b = b, a
return (a - 1) * 90 - a * (a - 1) // 2 + (b - a - 1)
def idx_to_ambo(idx):
a = 1
while idx >= (90 - a):
idx -= (90 - a)
a += 1
return a, a + 1 + idx
def coppia_idx(i, j):
if i > j: i, j = j, i
return i * (NUM_AMBI - 1) - i * (i + 1) // 2 + j - 1
def idx_to_coppia(ci):
i = 0
while ci >= (NUM_AMBI - 1 - i):
ci -= (NUM_AMBI - 1 - i)
i += 1
return i, i + 1 + ci
def fmt(d): return f"{d[:2]}/{d[2:4]}/{d[4:]}"
def leggi_archivio(path):
estrazioni, date = [], []
with open(path, "r", encoding="utf-8") as f:
for lineno, line in enumerate(f, 1):
line = line.strip()
if not line: continue
if len(line) < 118:
print(f" [WARN] riga {lineno} corta, saltata.")
continue
# Salta le estrazioni prima di ID_INIZIO
if lineno < ID_INIZIO:
continue
data, cifre = line[:8], line[8:118]
ruote = []
for r in range(11): # legge tutte e 11
off = r * NUM_ESTRATTI * 2
nums = []
for e in range(NUM_ESTRATTI):
try: nums.append(int(cifre[off + e*2 : off + e*2 + 2]))
except: nums.append(0)
ruote.append(nums)
date.append(data)
estrazioni.append(ruote)
return np.array(estrazioni, dtype=np.int16), date
def build_arrays():
print(" Precalcolo array coppie...", end=" ", flush=True)
t0 = time.time()
ambo_i_arr = np.empty(NUM_COPPIE, dtype=np.int32)
ambo_j_arr = np.empty(NUM_COPPIE, dtype=np.int32)
ci = 0
for i in range(NUM_AMBI):
n = NUM_AMBI - i - 1
ambo_i_arr[ci:ci+n] = i
ambo_j_arr[ci:ci+n] = np.arange(i+1, NUM_AMBI, dtype=np.int32)
ci += n
print(f"fatto in {time.time()-t0:.1f}s")
return ambo_i_arr, ambo_j_arr
def calcola(arr, ambo_i_arr, ambo_j_arr):
N = arr.shape[0]
print(f"\n Estrazioni usate : {N:,} (dal ID {ID_INIZIO} in poi)")
print(f" Ruote : {NUM_RUOTE} ({', '.join(NOMI_RUOTE)})")
print(f" Coppie : {NUM_COPPIE:,}")
print(f" Soglia : <= {SOGLIA}\n")
rit_cor = np.zeros(NUM_COPPIE, dtype=np.uint16)
rit_max = np.zeros(NUM_COPPIE, dtype=np.uint16)
t0 = time.time()
for idx_e in range(N):
if idx_e % 200 == 0:
el = time.time() - t0
pct = idx_e / N * 100
eta = (el / (idx_e + 1)) * (N - idx_e) if idx_e > 0 else 0
print(f" [{idx_e:6,}/{N:,}] {pct:.1f}% ETA: {eta:.0f}s ", end="\r")
# Ambi usciti su tutte le 11 ruote
ambi_usciti = set()
for r in range(NUM_RUOTE):
nums = arr[idx_e, r]
for c1, c2 in COMBO_5_2:
a, b = int(nums[c1]), int(nums[c2])
if a > 0 and b > 0:
ambi_usciti.add(ambo_idx(a, b))
if not ambi_usciti:
rit_cor += 1
continue
ambi_arr = np.fromiter(ambi_usciti, dtype=np.int32)
mask = np.isin(ambo_i_arr, ambi_arr) | np.isin(ambo_j_arr, ambi_arr)
rit_max[mask] = np.maximum(rit_max[mask], rit_cor[mask])
rit_cor[mask] = 0
rit_cor += 1
# Fine archivio: aggiorna max con ritardi aperti
np.maximum(rit_max, rit_cor, out=rit_max)
print(f"\n Completato in {time.time()-t0:.1f}s")
return rit_max, rit_cor
def salva(rit_max, rit_att, date):
print(f"\n Filtro coppie con rit_max <= {SOGLIA}...")
idx_ok = np.where(rit_max <= SOGLIA)[0]
ord_key = np.lexsort((-rit_att[idx_ok], rit_max[idx_ok]))
idx_ok = idx_ok[ord_key]
totale = len(idx_ok)
print(f" Coppie trovate: {totale:,}")
print("\n" + "="*58)
print(f" BIAMBI CON RITARDO MASSIMO STORICO <= {SOGLIA}")
print(f" Dal ID {ID_INIZIO}: {fmt(date[0])} → {fmt(date[-1])}")
print(f" Ruote: tutte e 11 (inclusa Nazionale)")
print(f" Trovate: {totale:,}")
print("="*58)
print(f" {'Pos':>8} {'Ambo 1':>7} {'Ambo 2':>7} {'Rit.Max':>8} {'Rit.Att':>8}")
print(" " + "-"*52)
righe = []
for rank, ci in enumerate(idx_ok, 1):
ai, aj = idx_to_coppia(int(ci))
a1, b1 = idx_to_ambo(ai)
a2, b2 = idx_to_ambo(aj)
mx = int(rit_max[ci])
att = int(rit_att[ci])
riga = f"{rank:>8}. {a1:02d}-{b1:02d} {a2:02d}-{b2:02d} {mx:>8} {att:>8}"
righe.append(riga)
if rank <= 50:
print(" " + riga)
if totale > 50:
print(f"\n ... totale {totale:,} coppie — tutte nel file")
print("="*58)
header = (
f"BIAMBI CON RITARDO MASSIMO STORICO <= {SOGLIA}\n"
f"Archivio : {fmt(date[0])} -> {fmt(date[-1])}\n"
f"ID inizio : {ID_INIZIO}\n"
f"Estrazioni: {len(date):,}\n"
f"Ruote : 11 (inclusa Nazionale)\n"
f"Trovate : {totale:,} coppie\n"
f"{'='*58}\n"
f"{'Pos':>8} {'Ambo 1':>7} {'Ambo 2':>7} {'Rit.Max':>8} {'Rit.Att':>8}\n"
f"{'-'*54}\n"
)
os.makedirs(os.path.dirname(OUTPUT), exist_ok=True)
with open(OUTPUT, "w", encoding="utf-8") as f:
f.write(header)
for r in righe:
f.write(r.strip() + "\n")
print(f"\n File salvato: {OUTPUT}")
return totale
def main():
print("╔══════════════════════════════════════════════════════════════╗")
print("║ BIAMBI CON RITARDO MAX STORICO <= SOGLIA — LOTTO ║")
print("║ (11 ruote inclusa Nazionale - dal ID 8117) ║")
print("╚══════════════════════════════════════════════════════════════╝\n")
if not os.path.exists(ARCHIVIO):
print(f"[ERRORE] Archivio non trovato: {ARCHIVIO}")
sys.exit(1)
print(f" Lettura archivio: {ARCHIVIO}")
print(f" ID inizio : {ID_INIZIO}")
arr, date = leggi_archivio(ARCHIVIO)
print(f" Righe lette: {len(date):,} ({fmt(date[0])} → {fmt(date[-1])})")
ambo_i_arr, ambo_j_arr = build_arrays()
rit_max, rit_att = calcola(arr, ambo_i_arr, ambo_j_arr)
totale = salva(rit_max, rit_att, date)
print(f"\n Coppie totali : {NUM_COPPIE:,}")
print(f" Coppie <= {SOGLIA} : {totale:,}")
print(f" Percentuale : {totale/NUM_COPPIE*100:.4f}%")
print("\n Arrivederci!")
if __name__ == "__main__":
main()
Cinzia non penso si riesca a farlo . i tri ambi sono miliardi .Genios, visto che ci mette così poco, vorrei arrivare ad un tot di ambi ( novambi o decambi) che abbiano un mx st 14 o inferiore.
Puoi farlo tu? Io poi te li controllo.
E ponendo la condizione di numeri tutti diversi?Cinzia non penso si riesca a farlo . i tri ambi sono miliardi .
devi scaricare il programmma spaziometria foreverBuonasera genios mi puoi aiutare
ARCHIVIO = r"C:\Users\Evandro\AppData\Roaming\spaziometria\ArcTlv\Archivio.txt"
OUTPUT = r"C:\Users\Evandro\Desktop\biambi_sotto79.txt"
quando lancio il tuo programma il mio archivio ArcTlv\Archivio.txt è fermo al 13/05/2023, come si aggiorna su spaziometria?. E poi la cartella per il salvataggio deve essere nominata biambi_sotto79.txt?, provando con archivio non aggiornato non salva nella cartella. Grazie
Forse per i 10 ambi occorrerebbe fare una ricerca su tutte le milioni di cinquine ,E ponendo la condizione di numeri tutti diversi?
Vedi i miei per esempio (3D "Ambi su tutte e NZ)?