Novità

Script biambo

il mio script in python ci mette circa 6 minuti ad analizzare gli 8 milioni di bi ambi . Ora come selezioni gli ambi da giocare ? Se vuoi ti passo lo script .
 
Codice:
"""
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()
 
IO USO L' INTERFACCIA THONNY . DOVRESTI SCARICARLO E POI INCOLLARE LO SCRIPT NELL' INTERFACCIA DI THONNY . TIPO SPAZIOSCRIPTCINZIA.jpg
 
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.
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 23 maggio 2026
    Bari
    19
    83
    72
    49
    07
    Cagliari
    53
    26
    63
    50
    33
    Firenze
    15
    34
    10
    44
    19
    Genova
    25
    12
    86
    48
    11
    Milano
    19
    38
    21
    40
    62
    Napoli
    88
    44
    56
    90
    41
    Palermo
    31
    35
    42
    77
    14
    Roma
    30
    43
    04
    38
    74
    Torino
    68
    10
    56
    81
    86
    Venezia
    03
    49
    16
    89
    84
    Nazionale
    67
    38
    60
    75
    41
    Estrazione Simbolotto
    Milano
    43
    44
    36
    23
    30
Indietro
Alto