From 2d459f7b13cb95437ab5da7b916fdf45bf1840fa Mon Sep 17 00:00:00 2001 From: umsangdon Date: Thu, 1 Oct 2026 20:01:08 +0900 Subject: [PATCH] =?UTF-8?q?feat(m02-df):=20=ED=91=9C=20=EB=B2=94=EC=9C=84?= =?UTF-8?q?=20=EC=B9=B8=20=EC=88=AB=EC=9E=90=20=ED=95=98=EB=82=98(?= =?UTF-8?q?=EC=95=84=EB=9E=98=20=3D=20=EC=9C=84)=EB=8A=94=20=EA=B0=99?= =?UTF-8?q?=EC=9D=8C=EC=9C=BC=EB=A1=9C=20=EB=A7=9E=EC=B6=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 표에서 찾기 범위 칸: 아래 = 위면 값 == 그 수 · 다르면 아래 < 값 <= 위(빈 끝 열림) — 견치돌 높이 4 같은 줄 - 시험 24개 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VBToTCGk5dqDKeXCEP3vhk --- M02_MasterTemplete/DataFlow/M02_DF_Rule.ts | 6 ++++-- resources/tester/test_m02_df_model.py | 11 +++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/M02_MasterTemplete/DataFlow/M02_DF_Rule.ts b/M02_MasterTemplete/DataFlow/M02_DF_Rule.ts index 99b13b959..adf25c2fa 100644 --- a/M02_MasterTemplete/DataFlow/M02_DF_Rule.ts +++ b/M02_MasterTemplete/DataFlow/M02_DF_Rule.ts @@ -3,7 +3,8 @@ * 선 규칙 · 끝수 → 엑셀 수식 — 우리 스프레드시트 엔진 한 벌로 셈 · 선 위 규칙 글(쉬운 말) · DOM 없음 * * 한 번 셈 = 시트 하나: A1 부터 보낸 값(표면 머리 줄 포함 덩어리) · 그 오른쪽에 조건 값 · 맨 끝 칸에 규칙 수식 - * lookup = 줄마다 「맞음」 칸(같음 · 범위는 「이름·아래」 < 값 ≤ 「이름·위」 · 빈 끝은 열림) → 맞은 줄 수 · INDEX/MATCH + * lookup = 줄마다 「맞음」 칸(같음 · 범위는 「이름·아래」 < 값 ≤ 「이름·위」 · 빈 끝은 열림 · 아래 = 위면 값 == 그 수) + * → 맞은 줄 수 · INDEX/MATCH * gate = IF(조건, 보낸 값, NA()) · scale = × ÷ (1 ± %) · round = ROUND · ROUNDUP · ROUNDDOWN * ========================================================================== */ @@ -177,7 +178,8 @@ function lookup( else if (low && high) tests.push( (r) => - `AND(OR(ISBLANK(${low}${r}),${low}${r}<${ref}),OR(ISBLANK(${high}${r}),${ref}<=${high}${r}))`, + `IF(AND(NOT(ISBLANK(${low}${r})),${low}${r}=${high}${r}),${ref}=${low}${r},` + + `AND(OR(ISBLANK(${low}${r}),${low}${r}<${ref}),OR(ISBLANK(${high}${r}),${ref}<=${high}${r})))`, ); else bad = true; }); diff --git a/resources/tester/test_m02_df_model.py b/resources/tester/test_m02_df_model.py index 56bdf7c3d..449a25a04 100644 --- a/resources/tester/test_m02_df_model.py +++ b/resources/tester/test_m02_df_model.py @@ -609,3 +609,14 @@ def test_다_다른_로직_받는_알약_예시값_차례() -> None: assert (a, b, c) == (70000, 14000, 21000) assert designs == [["변수", "길이", 7], ["다른 로직", "계수", 10]] assert plain == [7, None] + + +def test_표_범위칸_숫자하나는_같음() -> None: + got = _run( + RULE + + "const T = [['높이·아래', '높이·위', '석공'], [4, 4, 0.5], [4, 6, 0.6], [null, 3, 0.4]];\n" + "const rule = { kind: 'lookup', conds: [{ col: '높이', from: { box: 'b1', name: '높이' } }], col: '석공' };\n" + "out([4, 5, 2, 3.5, 6].map(h => { const r = R.applyRule(rule, T, { 높이: h }); return [r.value, r.why]; }));" + ) + # 4 = 「4」 줄만(같음) · 4 는 「4~6」(초과) 에 안 듦 · 빈 아래 끝은 열림 + assert got == [[0.5, None], [0.6, None], [0.4, None], [None, "표에 없는 조건"], [0.6, None]]