fix(784-1): 「우리 품」 잘못 보임 뿌리 고침 — 못 맞춤 빈칸 · 가드 칸 자동값 0 · 수 칸 짝 · 자재 단위 배 1 · 절 하나 덧 없음 · 엑셀 값 표지
- A 옵션 찾기 못 맞춤(수준 9 · 거리 ≥ 1) = 우리 품 · 입력 안 냄 · 「못맞춤」 표지 · 꼬리표 「→ –(우리 셈 조건 못 찾음)」 - B 자동값 「만약(X > 0, X, 기본)」 칸 = 나눗수 퍼뜨림에서 뺌(0 = 원문 기본) · 옵션 후보엔 옛 1 도 둠 - C 하나씩 조합 — 후보 ≤ 4 수 칸도 둘씩 짝 - D 엑셀이 값으로 넣은 「0 = 식」 칸 출처 「엑셀 값 · 식 아님」 · 꼬리표 「원문 식이면 품 · 금액(조건)」 - E 결과단위 「자재」 = 배 1 · 공/㎥ ≡ 공㎥ - F 품 비교 우리 품 × 대상 몫 - G 절 하나 블록 = 덧 로직은 후보만(이중 계상 막음) - H 1위 옵션 수준 ≤ 2 면 그 입력을 대상 입력값으로 - I 규격 「L=…cm」 를 거리 칸에 안 넣음 · 수 고르기는 제 단위 붙은 수만 · 엑셀 수 「1 ㎡」 를 m 로 안 읽음 - 우리지문 · 맞춤 캐시 판 올림(FP 2 · CALC 3) - 새 지킴 시험 test_635_hopyo_ours_qty - 낡은 시험 둘(test_628 표지 수 18 · test_621 S1 울진소광 해시)은 HEAD 에서도 실패 — 782-3 마스터 합침 뒤 값 · 손대지 않음 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,12 +2,14 @@
|
||||
"""견본 입력 — 마스터 화면 보기용 자동값(프로젝트 기본값 아님 · 저장 안 함).
|
||||
|
||||
고르기 = 목록 첫째 · 범위 = 최솟값 · 찾기 조건 값으로 쓰이는 수 = 그 표 그 칸 가장 낮은 줄 값
|
||||
(범위 줄이면 그 줄에 드는 아래 끝) · 나누는 자리에 오는 수 = 1 · 그 밖 0.
|
||||
(범위 줄이면 그 줄에 드는 아래 끝) · 나누는 자리에 오는 수 = 1 · 그 밖 0
|
||||
(「만약(X > 0, X, 기본)」 의 X 는 나누는 자리여도 0 = 기본).
|
||||
찾기·나누기 쓰임은 로직 식(중간 · 결과 · 호표 수량·요소 · 덧줄)을 풀어 알아냄.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from decimal import Decimal
|
||||
|
||||
import master_formula as mf
|
||||
@@ -46,12 +48,21 @@ def _uses(row: dict) -> tuple[dict, set]:
|
||||
for cond, arg in part[2]:
|
||||
if arg[0] == "name":
|
||||
finds.setdefault(arg[1], []).append((part[1], cond))
|
||||
guard = guards(row) # 「0 = 기본」 칸은 나누는 자리로 안 퍼뜨림(자동값 0 = 기본)
|
||||
for step in reversed(row.get("중간", [])):
|
||||
if step["이름"] in divs:
|
||||
divs |= _names(mf.parse(step["식"]))
|
||||
divs |= _names(mf.parse(step["식"])) - guard
|
||||
return finds, divs
|
||||
|
||||
|
||||
_GUARD = re.compile(r"만약\(\s*(\w+)\s*>\s*0\s*,\s*\1\s*,")
|
||||
|
||||
|
||||
def guards(row: dict) -> set:
|
||||
"""「만약(X > 0, X, 기본)」 꼴 중간 식의 X — 0 이면 원문 기본(25㎏ · 450분 · 식 · 표)."""
|
||||
return {m for s in row.get("중간", []) for m in _GUARD.findall(s["식"])}
|
||||
|
||||
|
||||
def _fits(master: mf.Master, ref: str, cond: str) -> list:
|
||||
"""표 `ref` 조건 칸 `cond` 에 드는 수 — 낮은 차례 · 범위 칸이면 줄마다 그 줄에 드는 끝
|
||||
(아래 끝이 열린 줄 「60 미만」 은 0)."""
|
||||
|
||||
Reference in New Issue
Block a user