2025-11-10

Python Lottószám variaciók. 1 rész.

 Néhány kész variáció amit a kód adott.

1. / 

# 16 szám variálása, Skandináv Lottó, legalább 1 db biztos 4-es!
# Feltétel, hogy a variált számokban benne legyenek a húzott számok!
Futtatás a C(16, 7, 7, 4) paraméterekkel:
### Eredmény
**Szükséges fogadási szelvények száma: 7 db.**
**Épített fedezeti rendszer (szelvények):**
Sz1: [1, 2, 3, 4, 5, 6, 7]
Sz2: [8, 9, 10, 11, 12, 13, 14]
Sz3: [1, 2, 3, 8, 9, 15, 16]
Sz4: [4, 5, 6, 7, 10, 15, 16]
Sz5: [4, 11, 12, 13, 14, 15, 16]
Sz6: [5, 6, 7, 8, 9, 15, 16]
Sz7: [1, 2, 3, 4, 10, 15, 16]

Futásidő: 2.55 másodperc

2./
# 20 szám variálása, Ötöslottó, legalább 1db biztos 2-es.
# Feltétel, hogy a variált számokban benne legyenek a húzott számok! 
Heurisztikus Fedezet Keresése: C(20, 5, 5, 2)
len(osszes_k_halmaz)=15504
len(fedezetlen_k_halmazok)=15504
len(osszes_l_halmaz)=15504

Szelvény 1 hozzáadva. Még fedezetlen: 9828 / 15504
Szelvény 2 hozzáadva. Még fedezetlen: 5352 / 15504
Szelvény 3 hozzáadva. Még fedezetlen: 2076 / 15504
Szelvény 4 hozzáadva. Még fedezetlen: 0 / 15504

**Szükséges fogadási szelvények száma: 4 db.**
**Épített fedezeti rendszer (szelvényei):**
Sz1: [1, 2, 3, 4, 5]
Sz2: [6, 7, 8, 9, 10]
Sz3: [11, 12, 13, 14, 15]
Sz4: [16, 17, 18, 19, 20]

Futásidő: 234.71 másodperc

3./

# Feltétel, hogy a variált számokban benne legyenek a húzott számok!
Heurisztikus Fedezet Keresése: C(21, 5, 5, 2)
len(osszes_k_halmaz)=20349
len(fedezetlen_k_halmazok)=20349
len(osszes_l_halmaz)=20349

Szelvény 1 hozzáadva. Még fedezetlen: 13468 / 20349
Szelvény 2 hozzáadva. Még fedezetlen: 7887 / 20349
Szelvény 3 hozzáadva. Még fedezetlen: 3606 / 20349
Szelvény 4 hozzáadva. Még fedezetlen: 625 / 20349
Szelvény 5 hozzáadva. Még fedezetlen: 125 / 20349
Szelvény 6 hozzáadva. Még fedezetlen: 0 / 20349

**Szükséges fogadási szelvények száma: 6 db.**
**Épített fedezeti rendszer (szelvényei):**
Sz1: [1, 2, 3, 4, 5]
Sz2: [6, 7, 8, 9, 10]
Sz3: [11, 12, 13, 14, 15]
Sz4: [16, 17, 18, 19, 20]
Sz5: [1, 2, 3, 4, 21]
Sz6: [1, 2, 3, 5, 21]

Futásidő: 473.05 másodperc

A kód:
import itertools
import time


class SkandiSzelvenyekKeszito:
"""Normál sebességgel"""
def __init__(self, v_szam, k_huzas, l_szelveny, t_talalat):
self.v_szamok = v_szam
self.k_huzas = k_huzas
self.l_szelveny = l_szelveny
self.t_talalat = t_talalat

def a_fedezeti_rendszer_epitese(self):
szamok_halmaza = list(range(1, self.v_szamok + 1))

osszes_k_halmaz = [frozenset(kombi) for kombi in itertools.combinations(
szamok_halmaza, self.k_huzas)]
print(f'{len(osszes_k_halmaz)=}')

fedezetlen_k_halmazok = set(osszes_k_halmaz)
print(f'{len(fedezetlen_k_halmazok)=}')

osszes_l_halmaz = [frozenset(kombi) for kombi in itertools.combinations(
szamok_halmaza, self.l_szelveny)]
print(f'{len(osszes_l_halmaz)=}')

szelvenyek_szama = 0
fedezeti_rendszer = []

start_time = time.time()

print()
while fedezetlen_k_halmazok:
szelvenyek_szama += 1
legjobb_szelveny = None
legtobbet_fedezett = -1

for szelveny_jelolt in osszes_l_halmaz:
jelenlegi_fedezet = 0
for k_halmaz in fedezetlen_k_halmazok:
if len(szelveny_jelolt.intersection(k_halmaz)) >= self.t_talalat:
jelenlegi_fedezet += 1

if jelenlegi_fedezet > legtobbet_fedezett:
legtobbet_fedezett = jelenlegi_fedezet
legjobb_szelveny = szelveny_jelolt

if legjobb_szelveny:
fedezeti_rendszer.append(list(legjobb_szelveny))
ujonnan_fedezettek = set()
for k_halmaz in fedezetlen_k_halmazok:
if len(legjobb_szelveny.intersection(k_halmaz)) >= self.t_talalat:
ujonnan_fedezettek.add(k_halmaz)

fedezetlen_k_halmazok -= ujonnan_fedezettek

if legtobbet_fedezett == 0 and fedezetlen_k_halmazok:
print("Nem találtunk megfelelő szelvényt, de maradt fedezetlen kombináció.")
break

print(f"Szelvény {szelvenyek_szama} hozzáadva. "
f"Még fedezetlen: {len(fedezetlen_k_halmazok)} / {len(osszes_k_halmaz)}")

end_time = time.time()
return szelvenyek_szama, fedezeti_rendszer, end_time - start_time


class SzelvenyekEllenor:
def __init__(self, container, f_szelvenyek, v_szamok):
self.master = container
self.fogadasi_szelvenyek = f_szelvenyek
self.variacios_szamok = v_szamok
self.mind_megfelel = True
self.talalat_db = 0
self.rossz_huzasok = []
self.osszes_lehetseges_huzasiszelveny = None

self.ellenorzes()
self.eredmeny_megjelenito()

def ellenorzes(self):
""""""
# Összes lehetséges 7 számú kombináció
variacios_szamok_lista = list(range(1, self.variacios_szamok + 1))

# Húzási szelvények készítése
self.osszes_lehetseges_huzasiszelveny = list(itertools.combinations(
variacios_szamok_lista, 7))

for nyero_szamok in self.osszes_lehetseges_huzasiszelveny:
talalat_van = False
for szelveny in self.fogadasi_szelvenyek:
if len(set(szelveny) & set(nyero_szamok)) >= 4:
talalat_van = True
self.talalat_db += 1
break

if not talalat_van:
self.mind_megfelel = False
self.rossz_huzasok.append(nyero_szamok)


def eredmeny_megjelenito(self):
""""""
# Kiírás: mind_megfelel, osszes_lehetseges_nyeroszelveny, talalat_db, rossz_huzasok
if self.mind_megfelel:
print('\n* * * * * * * * Ellenőrzés * * * * * * * *')
print(f"Minden húzásnál van legalább 1 db 4-es vagy nagyobb találat.\n"
f"Minden lehetséges húzási számsor ellenőrzése: "
f"{len(self.osszes_lehetseges_huzasiszelveny)} darab.\n"
f"Találatos szelvények a nyerő osztályokban (4,5,6,7): {self.talalat_db} darab.")
else:
print(f"A vizsgált rendszer NEM felel meg!\n"
f"{len(self.rossz_huzasok)} húzási szelvény nem teljesít 4, vagy nagyobb találatot!")
print("Példák rossz húzásokra:", self.rossz_huzasok)




class Applikacio(SkandiSzelvenyekKeszito):
def __init__(self, v_szam, k_huzas, l_fogadasi, t_talalat):
# Helyes super() hívás:
super().__init__(v_szam, k_huzas, l_fogadasi, t_talalat)
# A variációs számok darab száma 15.
self.V = v_szam
# A Skandinávlottó gépi vagy a kézi huzás 7 darab száma.
self.K = k_huzas
# A Skandinávlottó fogadási szelvényei, egyenként 7 számmmal készülnek.
self.L = l_fogadasi
# Bármilyen húzottszám esetén, a minimális találati szám.
self.T = t_talalat

# --- Futtatás a C(16, 7, 7, 4) paraméterekkel ---
print(f"Heurisztikus Fedezet Keresése: C({self.V}, {self.K}, {self.L}, {self.T})")

# SkandiSzelvenyekKeszito osztály metódus hívás.
fogadasi_szelvenyek_szama, fogadasi_szelvenyek_lista, futasido = (
self.a_fedezeti_rendszer_epitese())

print(f"\n**Szükséges fogadási szelvények száma: {fogadasi_szelvenyek_szama} db.**")

print(f" **Épített fedezeti rendszer (szelvényei):**")
for idx, szelveny in enumerate(fogadasi_szelvenyek_lista):
print(f"Sz{idx + 1}: {szelveny}")

print(f"\nFutásidő: {futasido/60:.2f} perc, {futasido:.1f} másodperc")

SzelvenyekEllenor(self, fogadasi_szelvenyek_lista, self.V)


if __name__ == '__main__':
Applikacio(17, 7, 7, 4)

Gyorsabb változat a 2 részben!
Layco 
 
 
 
 

 

Nincsenek megjegyzések:

Megjegyzés küldése