- Narzędzia do symulacji i analizy losowań liczbowych
- lottery.py – generator losowań bez powtórzeń
- Opcje wiersza poleceń
- Przykłady użycia
- lottery_stats.py – analiza statystyczna wyników losowań
- Przykłady użycia
- lottery_common.py – wyszukiwanie wspólnych liczb w plikach CSV
- Tryby działania
- Przykłady użycia
- lottery_compare.py – porównywanie pojedynczego losowania z zestawami typowań
- Zasada działania
- Ważniejsze opcje
- Przykłady użycia
- Podsumowanie
Narzędzia do symulacji i analizy losowań liczbowych
Lottery to zestaw programów napisanych w Pythonie, służących do generowania losowych liczb w stylu gier liczbowych (Lotto, Multi Multi itp.) oraz do analizy statystycznej wyników takich losowań. Projekty dostępne są na GitHubie pod adresem github.com/IgorBrzezek/lottery i obejmują cztery narzędzia: główny generator losowań (lottery.py) oraz trzy programy statystyczne (lottery_stats.py, lottery_common.py, lottery_compare.py).
Do działania generatora z opcją –rndauto wymagany jest dodatkowy plik trandom.py, dostępny w repozytorium github.com/IgorBrzezek/trandom – jest to zaawansowany generator prawdziwie losowych liczb wykorzystujący wiele źródeł entropii.
lottery.py – generator losowań bez powtórzeń
Główny program pakietu. Jego zadaniem jest losowanie określonej liczby liczb z zadanego zakresu, w rundach, bez powtórzeń – aż do wyczerpania puli. Po wyczerpaniu puli następuje uzupełnienie i jedna runda finalowa, po czym program kończy działanie. Mechanizm ten odwzorowuje działanie rzeczywistych gier liczbowych, gdzie każda wylosowana liczba znika z puli w danej turze.
Program obsługuje dwa źródła losowości: domyślny generator Pythona (Mersenne Twister) oraz zewnętrzny silnik trandom.py uruchamiany przełącznikiem –rndauto, który dostarcza losowość opartą na 7 źródłach entropii sprzętowo-systemowej (jitter procesora, timing dysku, adresy pamięci, szeregowanie wątków, timing sieciowy, liczniki wydajności, systemowy CSPRNG). Dodatkowo, za pomocą opcji –mouse, –keyboard i –sensors można wzbogacić losowość o entropię z ruchów myszy, naciśnięć klawiszy lub czujników sprzętowych (temperatura CPU, prędkość wentylatorów itp.).
Opcje wiersza poleceń
Program wymaga trzech obowiązkowych argumentów: -a FROM (początek zakresu), -b TO (koniec zakresu) i -n COUNT (ile liczb losować w jednej rundzie). Do tego dostępny jest bogaty zestaw opcji modyfikujących działanie:
-nn (–noneighbor) – zapobiega występowaniu liczb sąsiadujących (różniących się o 1) w pojedynczym losowaniu.
–minlen N – ustawia minimalną odległość między dowolnymi dwoma wylosowanymi liczbami.
–nei N,M – wymaga wystąpienia dokładnie N ciągów M kolejnych liczb (np. –nei 1,2 oznacza dokładnie jedną parę sąsiadujących liczb).
–series N – powtarza cały proces losowania (wyczerpanie puli) N razy. Między seriami drukowana jest linia separatora.
–fullpool – każde losowanie odbywa się z pełnego zakresu, bez usuwania liczb z puli. Opcja –series określa liczbę losowań (domyślnie 1).
-t N (–threads N) – dzieli pracę na N wątków równoległych (wymaga –series). Każdy wątek ma własny generator PRNG. Nie działa z –rndauto.
–color – włącza kolorowe wyjście ANSI: nowe liczby na biało, powtórki na czerwono.
–colorneighbor – podświetla sąsiadujące liczby na zielono.
–seriesentropy – ponownie zbiera entropię z czujników przy każdej nowej serii (wymaga –rndauto).
–numbering cont|ext – numerowanie rund: cont (ciągłe, domyślne) lub ext (ciągłe/numer serii).
-w FILENAME (–write) – zapisuje wyniki do pliku CSV (jedna runda na linię, przecinki; pusta linia między seriami).
–wcont – przy -w zapisuje CSV bez pustych linii między seriami.
–nodisplay – wycisza wyświetlanie na terminalu (wymaga -w).
–pb (–progressbar) – pokazuje pasek postępu na stderr (wymaga –nodisplay).
-in FILE (–infile) – odczytuje i wyświetla plik CSV utworzony wcześniej przez -w.
–debug – wyświetla w nawiasach kwadratowych pozostałą pulę liczb po każdej rundzie.
Przykłady użycia
Podstawowe losowanie 6 liczb z zakresu 1-49:
python lottery.py -a 1 -b 49 -n 6
Z zapobieganiem sąsiadującym liczbom:
python lottery.py -a 1 -b 49 -n 6 -nn
Z wymogiem dokładnie jednej pary sąsiadujących liczb (np. 5,6):
python lottery.py -a 1 -b 49 -n 6 --nei 1,2
Z minimalną odległością 3 między liczbami:
python lottery.py -a 1 -b 49 -n 6 --minlen 3
Z użyciem trandom.py i entropią z myszy:
python lottery.py -a 1 -b 49 -n 6 --rndauto --mouse
Trzy serie po pełnym cyklu puli:
python lottery.py -a 1 -b 49 -n 6 --series 3
Pięć niezależnych losowań z pełnej puli:
python lottery.py -a 1 -b 49 -n 6 --fullpool --series 5
Równoległe 100 serii na 4 wątkach:
python lottery.py -a 1 -b 49 -n 6 --series 100 --threads 4
Zapis do pliku CSV z kolorami na ekranie:
python lottery.py -a 1 -b 49 -n 6 --color -w wynik.csv --colorneighbor
lottery_stats.py – analiza statystyczna wyników losowań
Program do analizy statystycznej danych z losowań liczbowych, wczytanych z pliku CSV. Oblicza procentowy udział każdej liczby we wszystkich losowaniach i prezentuje wyniki w formie tekstowej lub histogramu poziomego.
Program obsługuje pięć trybów analizy, z których należy wybrać dokładnie jeden:
-num N[,M,…] – statystyka dla jednej lub kilku konkretnych liczb.
–auto – histogram dla wszystkich liczb 1-49.
–mostfreq N – ranking N najczęściej występujących liczb.
–neighbors – wyświetlenie wierszy, w których występują liczby sąsiadujące (podświetlane na zielono).
–neighborstats – statystyka par sąsiadujących liczb (1-2, 2-3, … 48-49), sortowana według wartości pary.
Format CSV (domyślny Lotto): numer losowania, data (DD.MM.RRRR), sześć liczb. Obsługiwany jest również format niestandardowy przez opcję –format cols z podaniem indeksów kolumn (liczonych od 1).
Ważniejsze opcje:
-in FILE – plik wejściowy CSV (wymagany).
-acc N – liczba miejsc po przecinku w procentach (domyślnie 2).
–color – kolorowe wyjście ANSI.
–nosort – oryginalna kolejność liczb (bez sortowania).
–datemin i –datemax – filtrowanie według zakresu dat (tylko w trybie lotto).
Przykłady użycia
Statystyki dla konkretnej liczby:
python lottery_stats.py -in lotto.csv -num 7
Histogram dla wszystkich liczb 1-49:
python lottery_stats.py -in lotto.csv --auto
10 najczęściej występujących liczb:
python lottery_stats.py -in lotto.csv --mostfreq 10
Wyświetlenie wierszy z liczbami sąsiadującymi – tylko od 2000 roku:
python lottery_stats.py -in lotto.csv --neighbors --color --datemin 01.01.2000
Statystyki par sąsiadujących:
python lottery_stats.py -in lotto.csv --neighborstats --color
Pobranie danych z niestandardowego pliku CSV (liczby w kolumnach 3-8):
python lottery_stats.py -in dane.csv --auto --format "cols 3,4,5,6,7,8"
lottery_common.py – wyszukiwanie wspólnych liczb w plikach CSV
Program do analizy danych z losowań, który umożliwia trzy tryby działania: porównywanie dwóch plików CSV w poszukiwaniu wspólnych liczb, wyszukiwanie konkretnych zestawów liczb, oraz analizę częstości występowania kombinacji (par, trójek, czwórek itd.).
Tryby działania
Tryb pierwszy: porównanie dwóch plików (opcja -ina i -inb). Każdy wiersz pliku A jest porównywany z każdym wierszem pliku B. Jeśli mają wspólne liczby, oba wiersze są wyświetlane obok siebie, a wspólne liczby są podświetlane na czerwono (z –color).
Tryb drugi: wyszukiwanie konkretnych liczb (–searchnumbers lub -sn). Można podać listę liczb oddzielonych przecinkami. Opcja –searchm all (domyślnie) wymaga, aby wszystkie podane liczby występowały w wierszu; –searchm one wyświetla wiersze zawierające przynajmniej jedną z podanych liczb.
Tryb trzeci: analiza częstości kombinacji (-sf N, –searchfreq N). Dla zadanej liczby N program znajduje i zlicza wszystkie unikalne kombinacje N liczb występujące w pliku B. Wyniki mogą być sortowane rosnąco (–sort asc) lub malejąco (–sort desc). Opcja –top N ogranicza liczbę wyświetlanych wyników.
Ważniejsze opcje wspólne:
-inb FILE – plik B (wymagany we wszystkich trybach).
–lotto – skrót dla –colsb 3,4,5,6,7,8 (kolumny z liczbami w standardzie Lotto).
–color – kolorowe podświetlanie pasujących liczb na czerwono.
–pause – zatrzymanie po każdej stronie (tylko Windows).
–from i –to – filtrowanie według roku (data w kolumnie 2 pliku B).
-t N – liczba wątków do równoległego przetwarzania (tryb porównania).
-w FILE – zapis wyniku do pliku.
Przykłady użycia
Najczęstsze pary w historii Lotto:
python lottery_common.py -inb lotto2.csv --lotto -sf 2 --sort desc --top 10
Najczęstsze trójki w latach 2020-2026:
python lottery_common.py -inb lotto2.csv --lotto -sf 3 --sort desc --top 10 --from 2020 --to 2026
Wyszukanie wszystkich losowań zawierających liczby 1, 17 i 38:
python lottery_common.py -inb lotto2.csv --lotto --color --searchnumbers 1,17,38 --searchm all
Porównanie dwóch plików z użyciem 4 wątków:
python lottery_common.py -ina wynik1000.csv -colsa 1,2,3 -inb lotto2.csv --lotto -t 4 --color
lottery_compare.py – porównywanie pojedynczego losowania z zestawami typowań
Program porównuje pojedynczy wiersz losowania (plik A) z wieloma wierszami typowań (plik B). Plik B może zawierać wiele zestawów typowań oddzielonych pustymi wierszami. Program wyświetla, które typy trafiły określoną liczbę liczb, z kolorowym oznaczeniem liczby trafień.
Zasada działania
Plik A zawiera jedno lub więcej losowań. Za pomocą –seta (domyślnie 1) wybiera się, który wiersz ma być wzorcem. Plik B zawiera wiersze typowań; pierwsza kolumna to identyfikator typowania, pozostałe to liczby. Puste wiersze oddzielają zestawy (sety). Opcja –setb wybiera zestawy do porównania – może to być lista numerów lub „all”.
Wynik porównania: obok siebie wyświetlane są liczby z losowania i liczby z typowania. Liczby zgodne z losowaniem są kolorowane. Liczba trafień ma odrębny kolor: 0 – szary, 1 – jasnobiały, 2 – żółty, 3 – zielony, 4 – cyjan, 5 – czerwony, 6 – niebieski.
Opcja –stat włącza statystyki trafień dla każdego zestawu. Jeśli porównujemy wiele zestawów, na końcu wyświetlane jest podsumowanie łączne dla wszystkich zestawów (Overall Hits).
Ważniejsze opcje
–seta N – wybór wiersza z pliku A do analizy (liczone od 1).
–setb all – porównanie ze wszystkimi zestawami z pliku B.
–stat – statystyki trafień dla każdego zestawu.
–mono – wyjście ASCII bez kolorów ANSI.
–rownumbers – wyświetlanie identyfikatorów typowań.
–summaryonly – pokazuje tylko łączne podsumowanie trafień.
–showdata – wyświetla pełne wiersze danych z pliku B z numerami linii.
–colsa i –colsb – wybór kolumn do dopasowywania z plików A i B.
–displcolsa i –displaycolsb – wybór kolumn do wyświetlania (nie wpływa na dopasowywanie).
Przykłady użycia
Podstawowe porównanie losowania z pierwszym zestawem typowań:
python lottery_compare.py -a lotto.csv -b moje.csv
Porównanie ze wszystkimi zestawami i statystykami:
python lottery_compare.py -a lotto.csv -b moje.csv --setb all --stat
Same łączne podsumowanie trafień (bez wyświetlania poszczególnych zestawów):
python lottery_compare.py -a lotto.csv -b moje.csv --setb all --summaryonly
Porównanie z użyciem określonych kolumn w obu plikach (kolumny 3-8 z A i 2-7 z B):
python lottery_compare.py -a result1000_a.csv -b result1000_b.csv --colsa 3-8 --colsb 2-7
Wyświetlenie numerów typowań i zestawów z kolorowymi separatorami:
python lottery_compare.py -a lotto.csv -b moje.csv --setb all --rownumbers --ppcolor
Podsumowanie
Pakiet Lottery to kompletne rozwiązanie dla każdego, kto interesuje się symulacją gier liczbowych lub analizą statystyczną wyników losowań. Generator lottery.py oferuje zaawansowane mechanizmy losowania, w tym różne źródła prawdziwej losowości dzięki integracji z trandom.py, ograniczenia na odległości między liczbami i wsparcie dla równoległego przetwarzania na wielu wątkach. Programy statystyczne (lottery_stats.py, lottery_common.py, lottery_compare.py) pozwalają na dogłębną analizę danych – od prostych statystyk częstości, przez wyszukiwanie kombinacji i porównywanie zestawów, po szczegółowe raporty trafień typowań. Wszystkie programy obsługują kolorowe wyjście ANSI, co znacznie ułatwia interpretację wyników w terminalu. Źródła są w pełni dostępne na GitHubie na licencji MIT, gotowe do użycia i modyfikacji.
Źródła: github.com/IgorBrzezek/lottery
