- final_BallFilter: CSV history loader, TRAIN_ALLOW for 6-sum and week diff, fix filterOneDigitPattern ball overwrite bug, drop socket call - final_filter_params: build sum6 and abs_sum_diff from rounds 1-800 - filter_model re-exports BallFilter; train/valid evaluate pass-through counts - final_filterTest aligned with 1_FilterTest_25 plus optional MC survivors - README and scripts/run_with_ncue.sh for ncue workflow Made-with: Cursor
40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""
|
|
학습 구간(회차 1~800) 당첨번호로부터 6개 합 및 전주 합 차이 허용 집합만 계산합니다.
|
|
`final_BallFilter`의 나머지 필터는 `BallFilter_25`와 동일한 고정 임계값을 유지합니다.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
from dataclasses import dataclass
|
|
|
|
import pandas as pd
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class TrainAllow:
|
|
sum6: frozenset
|
|
abs_sum_diff: frozenset
|
|
|
|
|
|
def build_train_allow(max_no: int = 800) -> TrainAllow:
|
|
base = os.path.dirname(__file__)
|
|
path = os.path.join(base, "resources", "lotto_history.txt")
|
|
df = pd.read_csv(path, header=None)
|
|
df.columns = ["no", "b1", "b2", "b3", "b4", "b5", "b6", "bn"]
|
|
df = df[df["no"] <= max_no].sort_values("no")
|
|
rows = []
|
|
for _, r in df.iterrows():
|
|
b = sorted(int(r[f"b{i}"]) for i in range(1, 7))
|
|
rows.append((int(r["no"]), b))
|
|
sum6 = {sum(b) for _, b in rows}
|
|
abs_sum_diff = set()
|
|
for i in range(1, len(rows)):
|
|
s = sum(rows[i][1])
|
|
ps = sum(rows[i - 1][1])
|
|
abs_sum_diff.add(abs(s - ps))
|
|
return TrainAllow(sum6=frozenset(sum6), abs_sum_diff=frozenset(abs_sum_diff))
|
|
|
|
|
|
TRAIN_ALLOW = build_train_allow(800)
|