1./
# 15 szám variációja, Skandináv Lottó, legalább 1 db biztos 5-ös.
Heurisztikus Fedezet Keresése: C(15, 7, 7, 5)
len(osszes_k_halmaz)=6435
len(fedezetlen_k_halmazok)=6435
len(osszes_l_halmaz)=6435
Szelvény 1 hozzáadva. Még fedezetlen: 5790 / 6435
Szelvény 2 hozzáadva. Még fedezetlen: 5145 / 6435
Szelvény 3 hozzáadva. Még fedezetlen: 4500 / 6435
Szelvény 4 hozzáadva. Még fedezetlen: 3891 / 6435
Szelvény 5 hozzáadva. Még fedezetlen: 3389 / 6435
Szelvény 6 hozzáadva. Még fedezetlen: 2887 / 6435
Szelvény 7 hozzáadva. Még fedezetlen: 2450 / 6435
Szelvény 8 hozzáadva. Még fedezetlen: 2099 / 6435
Szelvény 9 hozzáadva. Még fedezetlen: 1748 / 6435
Szelvény 10 hozzáadva. Még fedezetlen: 1446 / 6435
Szelvény 11 hozzáadva. Még fedezetlen: 1161 / 6435
Szelvény 12 hozzáadva. Még fedezetlen: 946 / 6435
Szelvény 13 hozzáadva. Még fedezetlen: 743 / 6435
Szelvény 14 hozzáadva. Még fedezetlen: 583 / 6435
Szelvény 15 hozzáadva. Még fedezetlen: 425 / 6435
Szelvény 16 hozzáadva. Még fedezetlen: 325 / 6435
Szelvény 17 hozzáadva. Még fedezetlen: 240 / 6435
Szelvény 18 hozzáadva. Még fedezetlen: 187 / 6435
Szelvény 19 hozzáadva. Még fedezetlen: 142 / 6435
Szelvény 20 hozzáadva. Még fedezetlen: 107 / 6435
Szelvény 21 hozzáadva. Még fedezetlen: 78 / 6435
Szelvény 22 hozzáadva. Még fedezetlen: 57 / 6435
Szelvény 23 hozzáadva. Még fedezetlen: 42 / 6435
Szelvény 24 hozzáadva. Még fedezetlen: 30 / 6435
Szelvény 25 hozzáadva. Még fedezetlen: 21 / 6435
Szelvény 26 hozzáadva. Még fedezetlen: 13 / 6435
Szelvény 27 hozzáadva. Még fedezetlen: 8 / 6435
Szelvény 28 hozzáadva. Még fedezetlen: 3 / 6435
Szelvény 29 hozzáadva. Még fedezetlen: 0 / 6435
**Szükséges fogadási szelvények száma: 29 db.**
**Épített fedezeti rendszer (szelvényei):**
Sz1: [1, 2, 3, 4, 5, 6, 7]
Sz2: [1, 2, 8, 9, 10, 11, 12]
Sz3: [3, 4, 8, 9, 13, 14, 15]
Sz4: [5, 6, 7, 10, 11, 13, 14]
Sz5: [1, 2, 5, 12, 13, 14, 15]
Sz6: [3, 4, 6, 10, 11, 12, 15]
Sz7: [5, 6, 7, 8, 9, 12, 15]
Sz8: [1, 3, 7, 8, 10, 12, 13]
Sz9: [1, 4, 7, 9, 11, 14, 15]
Sz10: [2, 3, 5, 6, 8, 11, 14]
Sz11: [2, 4, 5, 6, 9, 10, 13]
Sz12: [2, 3, 7, 9, 11, 12, 13]
Sz13: [2, 4, 7, 8, 10, 14, 15]
Sz14: [1, 3, 5, 9, 10, 14, 15]
Sz15: [1, 4, 6, 8, 11, 13, 15]
Sz16: [1, 3, 4, 6, 9, 12, 14]
Sz17: [4, 5, 7, 8, 10, 11, 12]
Sz18: [2, 6, 7, 10, 13, 14, 15]
Sz19: [1, 2, 3, 5, 11, 13, 15]
Sz20: [1, 6, 7, 8, 9, 13, 14]
Sz21: [2, 4, 5, 9, 12, 13, 14]
Sz22: [1, 2, 3, 8, 9, 10, 11]
Sz23: [4, 5, 8, 10, 12, 13, 15]
Sz24: [1, 2, 3, 4, 11, 12, 14]
Sz25: [1, 6, 8, 11, 12, 14, 15]
Sz26: [2, 4, 7, 8, 9, 10, 11]
Sz27: [1, 2, 4, 5, 6, 8, 12]
Sz28: [2, 3, 5, 6, 7, 12, 15]
Sz29: [1, 2, 9, 10, 11, 12, 13]
Futásidő: 0.76 perc, 45.5 másodperc
* * * * * * * * Ellenőrzés * * * * * * * *
Minden húzásnál van legalább 1 db 5-ös vagy nagyobb találat.
Feltétel! A húzott számok benne legyenek a variációs listában!
Minden lehetséges húzási számsor ellenőrzése: 6435 darab.
Találatos szelvények a nyerő osztályokban (5,6,7): 6435 darab.
2./
# 18 szám variációja, Skandináv Lottó, legalább 1 db biztos 4-es
Heurisztikus Fedezet Keresése: C(18, 7, 7, 4)
len(osszes_k_halmaz)=31824
len(fedezetlen_k_halmazok)=31824
len(osszes_l_halmaz)=31824
Szelvény 1 hozzáadva. Még fedezetlen: 24816 / 31824
Szelvény 2 hozzáadva. Még fedezetlen: 17808 / 31824
Szelvény 3 hozzáadva. Még fedezetlen: 12200 / 31824
Szelvény 4 hozzáadva. Még fedezetlen: 8686 / 31824
Szelvény 5 hozzáadva. Még fedezetlen: 5392 / 31824
Szelvény 6 hozzáadva. Még fedezetlen: 3816 / 31824
Szelvény 7 hozzáadva. Még fedezetlen: 2442 / 31824
Szelvény 8 hozzáadva. Még fedezetlen: 1626 / 31824
Szelvény 9 hozzáadva. Még fedezetlen: 1017 / 31824
Szelvény 10 hozzáadva. Még fedezetlen: 609 / 31824
Szelvény 11 hozzáadva. Még fedezetlen: 377 / 31824
Szelvény 12 hozzáadva. Még fedezetlen: 204 / 31824
Szelvény 13 hozzáadva. Még fedezetlen: 94 / 31824
Szelvény 14 hozzáadva. Még fedezetlen: 32 / 31824
Szelvény 15 hozzáadva. Még fedezetlen: 0 / 31824
**Szükséges fogadási szelvények száma: 15 db.**
**Épített fedezeti rendszer (szelvényei):**
Sz1: [1, 2, 3, 4, 5, 6, 7]
Sz2: [8, 9, 10, 11, 12, 13, 14]
Sz3: [1, 2, 8, 15, 16, 17, 18]
Sz4: [3, 4, 9, 10, 15, 16, 17]
Sz5: [5, 6, 7, 11, 12, 13, 18]
Sz6: [5, 6, 7, 14, 15, 16, 17]
Sz7: [1, 2, 3, 4, 9, 14, 18]
Sz8: [1, 2, 3, 4, 11, 12, 13]
Sz9: [3, 4, 5, 6, 8, 10, 18]
Sz10: [1, 2, 7, 8, 9, 10, 11]
Sz11: [1, 10, 12, 13, 14, 15, 16]
Sz12: [2, 8, 11, 12, 13, 14, 17]
Sz13: [5, 6, 8, 9, 12, 13, 18]
Sz14: [3, 4, 7, 10, 11, 14, 18]
Sz15: [1, 2, 8, 9, 11, 15, 16]
Futásidő: 9.00 perc, 539.9 másodperc
* * * * * * * * Ellenőrzés * * * * * * * *
Minden húzásnál van legalább 1 db 4-es vagy nagyobb találat.
Feltétel! A húzott számok benne legyenek a variációs listában!
Minden lehetséges húzási számsor ellenőrzése: 31824 darab.
Találatos szelvények a nyerő osztályokban (4,5,6,7): 31824 darab.
3./
Heurisztikus Fedezet Keresése: C(19, 7, 7, 4)
len(osszes_k_halmaz)=50388
len(fedezetlen_k_halmazok)=50388
len(osszes_l_halmaz)=50388
Szelvény 1 hozzáadva. Még fedezetlen: 41217 / 50388
Szelvény 2 hozzáadva. Még fedezetlen: 32046 / 50388
Szelvény 3 hozzáadva. Még fedezetlen: 23675 / 50388
Szelvény 4 hozzáadva. Még fedezetlen: 18556 / 50388
Szelvény 5 hozzáadva. Még fedezetlen: 13473 / 50388
Szelvény 6 hozzáadva. Még fedezetlen: 9754 / 50388
Szelvény 7 hozzáadva. Még fedezetlen: 7131 / 50388
Szelvény 8 hozzáadva. Még fedezetlen: 5136 / 50388
Szelvény 9 hozzáadva. Még fedezetlen: 3669 / 50388
Szelvény 10 hozzáadva. Még fedezetlen: 2576 / 50388
Szelvény 11 hozzáadva. Még fedezetlen: 1825 / 50388
Szelvény 12 hozzáadva. Még fedezetlen: 1268 / 50388
Szelvény 13 hozzáadva. Még fedezetlen: 826 / 50388
Szelvény 14 hozzáadva. Még fedezetlen: 549 / 50388
Szelvény 15 hozzáadva. Még fedezetlen: 366 / 50388
Szelvény 16 hozzáadva. Még fedezetlen: 224 / 50388
Szelvény 17 hozzáadva. Még fedezetlen: 128 / 50388
Szelvény 18 hozzáadva. Még fedezetlen: 68 / 50388
Szelvény 19 hozzáadva. Még fedezetlen: 38 / 50388
Szelvény 20 hozzáadva. Még fedezetlen: 15 / 50388
Szelvény 21 hozzáadva. Még fedezetlen: 6 / 50388
Szelvény 22 hozzáadva. Még fedezetlen: 0 / 50388
**Szükséges fogadási szelvények száma: 22 db.**
**Épített fedezeti rendszer (szelvényei):**
Sz1: [1, 2, 3, 4, 5, 6, 7]
Sz2: [8, 9, 10, 11, 12, 13, 14]
Sz3: [1, 8, 15, 16, 17, 18, 19]
Sz4: [2, 3, 9, 10, 15, 16, 17]
Sz5: [4, 5, 6, 11, 12, 18, 19]
Sz6: [4, 7, 13, 14, 15, 16, 18]
Sz7: [2, 5, 7, 13, 14, 17, 19]
Sz8: [1, 3, 6, 7, 8, 9, 11]
Sz9: [1, 3, 6, 10, 12, 13, 14]
Sz10: [2, 4, 5, 8, 10, 12, 15]
Sz11: [1, 5, 9, 11, 16, 17, 18]
Sz12: [2, 3, 4, 9, 12, 16, 19]
Sz13: [2, 6, 7, 10, 11, 17, 18]
Sz14: [3, 6, 11, 13, 14, 15, 19]
Sz15: [4, 5, 8, 9, 10, 18, 19]
Sz16: [4, 7, 8, 12, 13, 16, 17]
Sz17: [1, 5, 7, 9, 12, 14, 15]
Sz18: [2, 4, 8, 10, 11, 14, 16]
Sz19: [3, 6, 8, 9, 13, 14, 18]
Sz20: [1, 2, 7, 10, 11, 15, 19]
Sz21: [3, 4, 5, 6, 7, 9, 10]
Sz22: [1, 3, 4, 5, 6, 12, 17]
Futásidő: 26.33 perc, 1579.9 másodperc
* * * * * * * * Ellenőrzés * * * * * * * *
Minden húzásnál van legalább 1 db 4-es vagy nagyobb találat.
Feltétel! A húzott számok benne legyenek a variációs listában!
Minden lehetséges húzási számsor ellenőrzése: 50388 darab.
Találatos szelvények a nyerő osztályokban (4,5,6,7): 50388 darab.
A gyorsabb kód készült:
Linux Mint,
Pythom 3.12,
PyCharm 2025.2.4 (Community Edition).
# gyorsítás
import itertools
import time
import multiprocessing
def _fedezet_szamitas(args):
"""
Modul-szintű segédfüggvény a multiprocessing-hez.
args = (szelvény_jelölt, fedezetlen_k_halmazok_list, t_talalat)
Visszaadja: (szelveny_jelolt, jelenlegi_fedezet)
"""
szelveny_jelolt, fedezetlen_k_halmazok_list, t_talalat = args
jelenlegi_fedezet = 0
# lista formában kapjuk a fedezetlen kombinációkat (picklable)
for k_halmaz in fedezetlen_k_halmazok_list:
# k_halmaz és szelveny_jelolt frozenset, intersection gyors
if len(szelveny_jelolt.intersection(k_halmaz)) >= t_talalat:
jelenlegi_fedezet += 1
return szelveny_jelolt, jelenlegi_fedezet
class SkandiSzelvenyekKeszito:
"""Gyorsítsd fel a multiprocessing-el!"""
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()
# Átalakítjuk a fedezetlen_k_halmazok-at listává, mert könnyebb picklezni
# (minden map hívásnál ezt fogjuk továbbadni)
# Megjegyzés: ez memóriát használ, cserébe egyszerűbb és kompatibilis.
with multiprocessing.Pool(processes=multiprocessing.cpu_count()) as pool:
# amíg marad fedezetlen kombináció
while fedezetlen_k_halmazok:
szelvenyek_szama += 1
# A Pool.map-hoz készítünk argument listát:
# minden jelölt szelvényhez átadjuk a jelenlegi fedezetlen k halmazokat (list)
fedezetlen_k_list = list(fedezetlen_k_halmazok)
args_iter = ((szelveny_jelolt, fedezetlen_k_list, self.t_talalat)
for szelveny_jelolt in osszes_l_halmaz)
# map visszaadja a (szelveny_jelolt, fed_szam) párokat
eredmenyek = pool.map(_fedezet_szamitas, args_iter)
# kiválasztjuk a legjobb jelöltet
legjobb_szelveny, legtobbet_fedezett = max(eredmenyek, key=lambda x: x[1])
if legtobbet_fedezett == 0:
print("Nem találtunk megfelelő szelvényt, de maradt fedezetlen kombináció.")
break
# hozzáadjuk a fedezeti rendszerhez
fedezeti_rendszer.append(list(legjobb_szelveny))
# eltávolítjuk azokat a k-halmazonokat, amelyeket ez a szelvény fedez
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
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):
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"Feltétel! A húzott számok benne legyenek a variációs listában!"
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):
super().__init__(v_szam, k_huzas, l_fogadasi, t_talalat)
self.V = v_szam
self.K = k_huzas
self.L = l_fogadasi
self.T = t_talalat
print(f"Heurisztikus Fedezet Keresése: C({self.V}, {self.K}, {self.L}, {self.T})")
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__':
# Ha sok a memória / processzor terhelés, csökkentsd V értékét teszteléshez.
Applikacio(19, 7, 7, 4)
Layco