- 헬퍼 동작 그대로(풀이 함수 본문은 옮겨 담음) · 제품 코드 안 고침 - 확인: 이 묶음 헬퍼를 쓰는 시험 218 개 전 218 통과 → 후 218 통과 (시험별 junit 대조 · 어긋남 0) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
73 lines
2.7 KiB
JavaScript
73 lines
2.7 KiB
JavaScript
/* 344-2 노선 짝 거울 — 진짜 TS(`logic/B05_Profile_Grade_Ground` · `logic/B05_Profile_Grade_Carry` ·
|
|
* `common_util_route_follow`)를 Node 로 돌림. 입력 argv[2] JSON(파이썬과 같은 값) · 표준출력 JSON 한 벌.
|
|
*/
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const { makeLoader } = require("./helper_ts_stub_loader.cjs");
|
|
|
|
const ROOT = path.join(__dirname, "..", "..");
|
|
|
|
function loadTs(file, stubs = {}) {
|
|
return makeLoader({
|
|
root: ROOT,
|
|
cache: false,
|
|
requireFor: (full) => (request) => {
|
|
if (stubs[request]) return stubs[request];
|
|
throw new Error(`stub 없음: ${request} (${file})`);
|
|
},
|
|
}).loadTs(path.join(ROOT, file));
|
|
}
|
|
|
|
const straightJudge = loadTs("B05_Profile/logic/B05_Profile_Profile_Straight.ts");
|
|
const curveLaw = loadTs("B05_Profile/logic/B05_Profile_Profile_CurveLaw.ts");
|
|
const pivot = loadTs("B05_Profile/logic/B05_Profile_UI_Profile_Pivot.ts", {
|
|
"./B05_Profile_Profile_Straight": straightJudge,
|
|
});
|
|
const alignment = loadTs("B05_Profile/logic/B05_Profile_UI_Profile_Alignment.ts", {
|
|
"./B05_Profile_UI_Profile_Pivot": pivot,
|
|
"./B05_Profile_Profile_Straight": straightJudge,
|
|
"./B05_Profile_Profile_CurveLaw": curveLaw,
|
|
});
|
|
const ground = loadTs("B05_Profile/logic/B05_Profile_Grade_Ground.ts", {
|
|
"./B05_Profile_Profile_CurveLaw": curveLaw,
|
|
"./B05_Profile_UI_Profile_Alignment": alignment,
|
|
});
|
|
const carry = loadTs("B05_Profile/logic/B05_Profile_Grade_Carry.ts", {
|
|
"./B05_Profile_UI_Profile_Alignment": alignment,
|
|
});
|
|
const catalog = require("./helper_322_catalog_module.cjs");
|
|
const station = loadTs("common_util/common_util_structure_station.ts", {
|
|
"./common_util_structure_catalog": catalog,
|
|
});
|
|
const follow = loadTs("common_util/common_util_route_follow.ts", {
|
|
"./common_util_structure_station": station,
|
|
});
|
|
|
|
const input = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
const out = {
|
|
ground: input.ground.map((item) => ground.groundFollowingBasePvi(item)),
|
|
carry: input.carry.map((item) => {
|
|
const span = carry.changedSpan(item.old_xy, item.new_xy);
|
|
return {
|
|
span,
|
|
result: span
|
|
? {
|
|
basePvi: carry.carryBase(item.old_xy, item.new_xy, item.base_pvi, item.ground_pvi),
|
|
edits: carry.carryEdits(
|
|
item.old_xy,
|
|
item.new_xy,
|
|
item.base_pvi,
|
|
item.edits,
|
|
item.stations,
|
|
10,
|
|
),
|
|
}
|
|
: null,
|
|
};
|
|
}),
|
|
pipes: input.pipes.map((item) => follow.projectPipePoints(item.points, item.line)),
|
|
structures: input.structures.map((item) => follow.followStructures(item.items, item.line)),
|
|
driftMax: follow.STRUCTURE_ROUTE_DRIFT_MAX_M,
|
|
};
|
|
process.stdout.write(JSON.stringify(out));
|