A Gábor Dénes Főiskolán működő Ratkó István matematika interdiszciplináris alkalmazásai Műhely 2022. március 25-én 10. alkalommal rendezte meg a Ratkó István emlékestet. Ezen már többször is részt vettem előadóként és a hallgatóság tagjaként is. 2014-ben Prímszámkereső algoritmusok hatékonysága címmel, 2015-ben A bűvös négyzet története és előállítása (oktatóprogram) címmel tartottam előadást. A jubileumi emlékesten pedig „Töltsünk ki az ötöslottón 100 szelvényt úgy, hogy valamelyik szelvénnyel biztosan legyen két találatunk!” – a feladat megoldásához vezető út címmel tartottam előadást.
A blog bejegyzésben röviden összefoglalom az előadást:
- Személyes élmények Ratkó tanár úrhoz kötődően
- Ötöslottó: diszkrét matematika, elemi kombinatorikai feladat, lehetséges különböző szelvények száma, öttalálatos valószínűsége, szemléltetés
- Véletlenszámok előállítása: valódi és ál (pszeudo) véletlenszámok, hardveres és szoftveres megoldások áttekintése, LCG
- Egyetlen véletlenszám előállítása Java nyelven: procedurális, OO, szálbiztos megoldások
- Egyetlen lottószelvény előállítása Java nyelven: adatszerkezet nélkül, logikai tömb (demóprogram), számtömb, szöveg (McMillan egyenlőtlenség, optimális kód, Huffman kód, prefixmentes kódolás, Shannon-Fano kód, hibajelző és hibajavító kód, Hamming távolság, Reed-Solomon kód, algebra: véges testek megkonstruálása), generikus lista (érték), generikus lista (keverés), generikus lista (elfogyasztás), generikus halmaz, funkcionális programozás / algoritmusok és adatszerkezetek rövid elemzése, összehasonlítása, kompromisszumok
- Találatok száma: matematika vs. programozási tételek, metszet tömbbel és generikus listával, Stream API-val, lambda kifejezéssel
- Különböző lottószelvények előállítása: összes eset, brute force, mesterséges intelligencia, problématér|állapottér, kombinatorikai robbanás kontrollálása
(szemléletváltás: az eddigi 1-90 intervallumból kiválasztott 5 különböző szám egy lottószelvényt jelentett, mostantól az 1-43949268 intervallumból kiválasztott különböző számok különböző lottószelvényeket jelentenek)
Eddig minden feldolgozható a középiskolás matematikai eszköztárral és kezdő Java objektumorientált programozás által biztosított mozgástérben. A továbbiakhoz szintet kell lépni.
A konkrét feladatspecifikáció:
„Töltsünk ki az ötöslottón 100 szelvényt úgy, hogy valamelyik szelvénnyel biztosan legyen két találatunk!” (Segítség: töltsünk ki 30 szelvényt úgy, hogy az 1-25 közötti számpárt lefedjék; 21 szelvényt úgy, hogy a 26-46 közötti összes számpárt lefedjék; 21 szelvényt úgy, hogy a 47-67 közötti összes számpárt lefedjék és 28 szelvényt úgy, hogy a 68-90 közötti összes számpárt lefedjék. Miért lesz így legalább két találatunk?)
A szintlépéshez hasznos ismerni két tankönyvet (Szilasi Zoltán: Bevezetés a véges geometriába, 2015; Reiman István: A geometria és határterületei, 2001) és egy tudományos cikket (Z. Füredi, G. J. Székely, Z. Zubor: On the Lottery Problem, 1995). További szükséges ismeretek (geometria, algebra, elemi matematika, kombinatorika): projektív geometria, véges projektív sík, Kirkman iskoláslány problémája, Fano-sík (mint algebrai és geometriai leképezés), Steiner-rendszer (ponthalmaz, amely elemszáma 6k+1 alakú prím), néhány konstruktív jellegű bizonyítás, skatulya-elv.
Az előadás a feladat megoldásához vezető útról szólt. Az eredmény előtti utolsó előtti lépés ezt jelenti (Java program konzolra kiírt szövege):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Töltsünk ki az ötöslottón 100 szelvényt úgy, hogy valamelyik szelvénnyel biztosan legyen két találatunk! Segítség: 1-25 közötti összes számpár (300 db): [(1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (1, 10), (1, 11), (1, 12), (1, 13), (1, 14), (1, 15), (1, 16), (1, 17), (1, 18), (1, 19), (1, 20), (1, 21), (1, 22), (1, 23), (1, 24), (1, 25), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10), (2, 11), (2, 12), (2, 13), (2, 14), (2, 15), (2, 16), (2, 17), (2, 18), (2, 19), (2, 20), (2, 21), (2, 22), (2, 23), (2, 24), (2, 25), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (3, 10), (3, 11), (3, 12), (3, 13), (3, 14), (3, 15), (3, 16), (3, 17), (3, 18), (3, 19), (3, 20), (3, 21), (3, 22), (3, 23), (3, 24), (3, 25), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (4, 11), (4, 12), (4, 13), (4, 14), (4, 15), (4, 16), (4, 17), (4, 18), (4, 19), (4, 20), (4, 21), (4, 22), (4, 23), (4, 24), (4, 25), (5, 6), (5, 7), (5, 8), (5, 9), (5, 10), (5, 11), (5, 12), (5, 13), (5, 14), (5, 15), (5, 16), (5, 17), (5, 18), (5, 19), (5, 20), (5, 21), (5, 22), (5, 23), (5, 24), (5, 25), (6, 7), (6, 8), (6, 9), (6, 10), (6, 11), (6, 12), (6, 13), (6, 14), (6, 15), (6, 16), (6, 17), (6, 18), (6, 19), (6, 20), (6, 21), (6, 22), (6, 23), (6, 24), (6, 25), (7, 8), (7, 9), (7, 10), (7, 11), (7, 12), (7, 13), (7, 14), (7, 15), (7, 16), (7, 17), (7, 18), (7, 19), (7, 20), (7, 21), (7, 22), (7, 23), (7, 24), (7, 25), (8, 9), (8, 10), (8, 11), (8, 12), (8, 13), (8, 14), (8, 15), (8, 16), (8, 17), (8, 18), (8, 19), (8, 20), (8, 21), (8, 22), (8, 23), (8, 24), (8, 25), (9, 10), (9, 11), (9, 12), (9, 13), (9, 14), (9, 15), (9, 16), (9, 17), (9, 18), (9, 19), (9, 20), (9, 21), (9, 22), (9, 23), (9, 24), (9, 25), (10, 11), (10, 12), (10, 13), (10, 14), (10, 15), (10, 16), (10, 17), (10, 18), (10, 19), (10, 20), (10, 21), (10, 22), (10, 23), (10, 24), (10, 25), (11, 12), (11, 13), (11, 14), (11, 15), (11, 16), (11, 17), (11, 18), (11, 19), (11, 20), (11, 21), (11, 22), (11, 23), (11, 24), (11, 25), (12, 13), (12, 14), (12, 15), (12, 16), (12, 17), (12, 18), (12, 19), (12, 20), (12, 21), (12, 22), (12, 23), (12, 24), (12, 25), (13, 14), (13, 15), (13, 16), (13, 17), (13, 18), (13, 19), (13, 20), (13, 21), (13, 22), (13, 23), (13, 24), (13, 25), (14, 15), (14, 16), (14, 17), (14, 18), (14, 19), (14, 20), (14, 21), (14, 22), (14, 23), (14, 24), (14, 25), (15, 16), (15, 17), (15, 18), (15, 19), (15, 20), (15, 21), (15, 22), (15, 23), (15, 24), (15, 25), (16, 17), (16, 18), (16, 19), (16, 20), (16, 21), (16, 22), (16, 23), (16, 24), (16, 25), (17, 18), (17, 19), (17, 20), (17, 21), (17, 22), (17, 23), (17, 24), (17, 25), (18, 19), (18, 20), (18, 21), (18, 22), (18, 23), (18, 24), (18, 25), (19, 20), (19, 21), (19, 22), (19, 23), (19, 24), (19, 25), (20, 21), (20, 22), (20, 23), (20, 24), (20, 25), (21, 22), (21, 23), (21, 24), (21, 25), (22, 23), (22, 24), (22, 25), (23, 24), (23, 25), (24, 25)] ebből kellene 30 db szelvényt kitölteni úgy, hogy az összes számpárt lefedje 26-46 közötti összes számpár (210 db): [(26, 27), (26, 28), (26, 29), (26, 30), (26, 31), (26, 32), (26, 33), (26, 34), (26, 35), (26, 36), (26, 37), (26, 38), (26, 39), (26, 40), (26, 41), (26, 42), (26, 43), (26, 44), (26, 45), (26, 46), (27, 28), (27, 29), (27, 30), (27, 31), (27, 32), (27, 33), (27, 34), (27, 35), (27, 36), (27, 37), (27, 38), (27, 39), (27, 40), (27, 41), (27, 42), (27, 43), (27, 44), (27, 45), (27, 46), (28, 29), (28, 30), (28, 31), (28, 32), (28, 33), (28, 34), (28, 35), (28, 36), (28, 37), (28, 38), (28, 39), (28, 40), (28, 41), (28, 42), (28, 43), (28, 44), (28, 45), (28, 46), (29, 30), (29, 31), (29, 32), (29, 33), (29, 34), (29, 35), (29, 36), (29, 37), (29, 38), (29, 39), (29, 40), (29, 41), (29, 42), (29, 43), (29, 44), (29, 45), (29, 46), (30, 31), (30, 32), (30, 33), (30, 34), (30, 35), (30, 36), (30, 37), (30, 38), (30, 39), (30, 40), (30, 41), (30, 42), (30, 43), (30, 44), (30, 45), (30, 46), (31, 32), (31, 33), (31, 34), (31, 35), (31, 36), (31, 37), (31, 38), (31, 39), (31, 40), (31, 41), (31, 42), (31, 43), (31, 44), (31, 45), (31, 46), (32, 33), (32, 34), (32, 35), (32, 36), (32, 37), (32, 38), (32, 39), (32, 40), (32, 41), (32, 42), (32, 43), (32, 44), (32, 45), (32, 46), (33, 34), (33, 35), (33, 36), (33, 37), (33, 38), (33, 39), (33, 40), (33, 41), (33, 42), (33, 43), (33, 44), (33, 45), (33, 46), (34, 35), (34, 36), (34, 37), (34, 38), (34, 39), (34, 40), (34, 41), (34, 42), (34, 43), (34, 44), (34, 45), (34, 46), (35, 36), (35, 37), (35, 38), (35, 39), (35, 40), (35, 41), (35, 42), (35, 43), (35, 44), (35, 45), (35, 46), (36, 37), (36, 38), (36, 39), (36, 40), (36, 41), (36, 42), (36, 43), (36, 44), (36, 45), (36, 46), (37, 38), (37, 39), (37, 40), (37, 41), (37, 42), (37, 43), (37, 44), (37, 45), (37, 46), (38, 39), (38, 40), (38, 41), (38, 42), (38, 43), (38, 44), (38, 45), (38, 46), (39, 40), (39, 41), (39, 42), (39, 43), (39, 44), (39, 45), (39, 46), (40, 41), (40, 42), (40, 43), (40, 44), (40, 45), (40, 46), (41, 42), (41, 43), (41, 44), (41, 45), (41, 46), (42, 43), (42, 44), (42, 45), (42, 46), (43, 44), (43, 45), (43, 46), (44, 45), (44, 46), (45, 46)] ebből kellene 21 db szelvényt kitölteni úgy, hogy az összes számpárt lefedje 47-67 közötti összes számpár (210 db): [(47, 48), (47, 49), (47, 50), (47, 51), (47, 52), (47, 53), (47, 54), (47, 55), (47, 56), (47, 57), (47, 58), (47, 59), (47, 60), (47, 61), (47, 62), (47, 63), (47, 64), (47, 65), (47, 66), (47, 67), (48, 49), (48, 50), (48, 51), (48, 52), (48, 53), (48, 54), (48, 55), (48, 56), (48, 57), (48, 58), (48, 59), (48, 60), (48, 61), (48, 62), (48, 63), (48, 64), (48, 65), (48, 66), (48, 67), (49, 50), (49, 51), (49, 52), (49, 53), (49, 54), (49, 55), (49, 56), (49, 57), (49, 58), (49, 59), (49, 60), (49, 61), (49, 62), (49, 63), (49, 64), (49, 65), (49, 66), (49, 67), (50, 51), (50, 52), (50, 53), (50, 54), (50, 55), (50, 56), (50, 57), (50, 58), (50, 59), (50, 60), (50, 61), (50, 62), (50, 63), (50, 64), (50, 65), (50, 66), (50, 67), (51, 52), (51, 53), (51, 54), (51, 55), (51, 56), (51, 57), (51, 58), (51, 59), (51, 60), (51, 61), (51, 62), (51, 63), (51, 64), (51, 65), (51, 66), (51, 67), (52, 53), (52, 54), (52, 55), (52, 56), (52, 57), (52, 58), (52, 59), (52, 60), (52, 61), (52, 62), (52, 63), (52, 64), (52, 65), (52, 66), (52, 67), (53, 54), (53, 55), (53, 56), (53, 57), (53, 58), (53, 59), (53, 60), (53, 61), (53, 62), (53, 63), (53, 64), (53, 65), (53, 66), (53, 67), (54, 55), (54, 56), (54, 57), (54, 58), (54, 59), (54, 60), (54, 61), (54, 62), (54, 63), (54, 64), (54, 65), (54, 66), (54, 67), (55, 56), (55, 57), (55, 58), (55, 59), (55, 60), (55, 61), (55, 62), (55, 63), (55, 64), (55, 65), (55, 66), (55, 67), (56, 57), (56, 58), (56, 59), (56, 60), (56, 61), (56, 62), (56, 63), (56, 64), (56, 65), (56, 66), (56, 67), (57, 58), (57, 59), (57, 60), (57, 61), (57, 62), (57, 63), (57, 64), (57, 65), (57, 66), (57, 67), (58, 59), (58, 60), (58, 61), (58, 62), (58, 63), (58, 64), (58, 65), (58, 66), (58, 67), (59, 60), (59, 61), (59, 62), (59, 63), (59, 64), (59, 65), (59, 66), (59, 67), (60, 61), (60, 62), (60, 63), (60, 64), (60, 65), (60, 66), (60, 67), (61, 62), (61, 63), (61, 64), (61, 65), (61, 66), (61, 67), (62, 63), (62, 64), (62, 65), (62, 66), (62, 67), (63, 64), (63, 65), (63, 66), (63, 67), (64, 65), (64, 66), (64, 67), (65, 66), (65, 67), (66, 67)] ebből kellene 21 db szelvényt kitölteni úgy, hogy az összes számpárt lefedje 68-90 közötti összes számpár (253 db): [(68, 69), (68, 70), (68, 71), (68, 72), (68, 73), (68, 74), (68, 75), (68, 76), (68, 77), (68, 78), (68, 79), (68, 80), (68, 81), (68, 82), (68, 83), (68, 84), (68, 85), (68, 86), (68, 87), (68, 88), (68, 89), (68, 90), (69, 70), (69, 71), (69, 72), (69, 73), (69, 74), (69, 75), (69, 76), (69, 77), (69, 78), (69, 79), (69, 80), (69, 81), (69, 82), (69, 83), (69, 84), (69, 85), (69, 86), (69, 87), (69, 88), (69, 89), (69, 90), (70, 71), (70, 72), (70, 73), (70, 74), (70, 75), (70, 76), (70, 77), (70, 78), (70, 79), (70, 80), (70, 81), (70, 82), (70, 83), (70, 84), (70, 85), (70, 86), (70, 87), (70, 88), (70, 89), (70, 90), (71, 72), (71, 73), (71, 74), (71, 75), (71, 76), (71, 77), (71, 78), (71, 79), (71, 80), (71, 81), (71, 82), (71, 83), (71, 84), (71, 85), (71, 86), (71, 87), (71, 88), (71, 89), (71, 90), (72, 73), (72, 74), (72, 75), (72, 76), (72, 77), (72, 78), (72, 79), (72, 80), (72, 81), (72, 82), (72, 83), (72, 84), (72, 85), (72, 86), (72, 87), (72, 88), (72, 89), (72, 90), (73, 74), (73, 75), (73, 76), (73, 77), (73, 78), (73, 79), (73, 80), (73, 81), (73, 82), (73, 83), (73, 84), (73, 85), (73, 86), (73, 87), (73, 88), (73, 89), (73, 90), (74, 75), (74, 76), (74, 77), (74, 78), (74, 79), (74, 80), (74, 81), (74, 82), (74, 83), (74, 84), (74, 85), (74, 86), (74, 87), (74, 88), (74, 89), (74, 90), (75, 76), (75, 77), (75, 78), (75, 79), (75, 80), (75, 81), (75, 82), (75, 83), (75, 84), (75, 85), (75, 86), (75, 87), (75, 88), (75, 89), (75, 90), (76, 77), (76, 78), (76, 79), (76, 80), (76, 81), (76, 82), (76, 83), (76, 84), (76, 85), (76, 86), (76, 87), (76, 88), (76, 89), (76, 90), (77, 78), (77, 79), (77, 80), (77, 81), (77, 82), (77, 83), (77, 84), (77, 85), (77, 86), (77, 87), (77, 88), (77, 89), (77, 90), (78, 79), (78, 80), (78, 81), (78, 82), (78, 83), (78, 84), (78, 85), (78, 86), (78, 87), (78, 88), (78, 89), (78, 90), (79, 80), (79, 81), (79, 82), (79, 83), (79, 84), (79, 85), (79, 86), (79, 87), (79, 88), (79, 89), (79, 90), (80, 81), (80, 82), (80, 83), (80, 84), (80, 85), (80, 86), (80, 87), (80, 88), (80, 89), (80, 90), (81, 82), (81, 83), (81, 84), (81, 85), (81, 86), (81, 87), (81, 88), (81, 89), (81, 90), (82, 83), (82, 84), (82, 85), (82, 86), (82, 87), (82, 88), (82, 89), (82, 90), (83, 84), (83, 85), (83, 86), (83, 87), (83, 88), (83, 89), (83, 90), (84, 85), (84, 86), (84, 87), (84, 88), (84, 89), (84, 90), (85, 86), (85, 87), (85, 88), (85, 89), (85, 90), (86, 87), (86, 88), (86, 89), (86, 90), (87, 88), (87, 89), (87, 90), (88, 89), (88, 90), (89, 90)] ebből kellene 28 db szelvényt kitölteni úgy, hogy az összes számpárt lefedje Miért lesz így legalább két találatunk? |
Végül ismertettem néhány lehetőséget az algoritmus vizsgálatára és az implementált Java forráskód tesztelésére.
Köszönöm Kupcsikné Fitus Ilona kolléganőnek, hogy a jubileumi Ratkó István emlékest szervezőjeként előadónak felkért. Örömmel csatlakoztam újra. A prezentációmat a résztvevőkkel megosztottam. Köszönöm az érdeklődő kollégáknak és hallgatóknak a részvételt és a pozitív visszajelzéseket. Az emlékestek programjai elérhetők. Ajánlom lottószelvény címkénket is, mert a téma igazi örökzöld.
A skatulya-elv megértését segítheti a születésnap-paradoxon is. Kapcsolódik a hash függvényekhez is, ami pedig az SHA algoritmushoz.