""" 학습 구간(회차 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)