项目编号:20261104-001。公开热点仅作需求方向,代码、合成输入和测试独立实现。真实浏览器运行结果已经与Node报告核对。

问题与实际范围

对显式正长度半开时段按结束时刻贪心选择最多不重叠项,输出可复核下标;不考虑权重、资源容量或真实排程。调用者主动提供脱敏JSON,本工具不连接榜单产品、不读取邮件或登录态,也不将热点宣传当成自己验证过的性能。工具交付的是一种可复算的小规则:输入错误应报错,空集合和边界应有明确口径,输出中的数学量不能直接充当真实业务结论。样本全部合成,不能把它们伪装成真实客户、健康或安全事件。

输入契约

每条时段数组最多64项,每项为[start,end]非负安全整数且start<end。半开边界允许前一结束等于下一开始,原数组下标从0开始;输出最大项数和贪心见证,不保证所有最优方案或最大总权重。 通用上限200条,id非空且批内唯一,长度最多256码元。字段实际类型、文本长度、有符号范围及数组上限均以上文契约和SCHEMA为准;整数文本与JSON数值不能擅自混用。错误字段拒绝整次分析,不静默补0。进入工具前应移除凭据、个人标识和不相关生产记录;离线页面不等于适合公开发布敏感日志。

{
  "id": "string",
  "routeMatrix": "intervals"
}

合成样本与报告

以下输入及输出取自实际Node报告命令。小规模样本可手工复算,方便识别端点、并列规则和零值口径。输出不代表平台审核结果或某个产品的官方指标。

{
  "records": [
    {
      "id": "a",
      "routeMatrix": [
        [
          0,
          3
        ],
        [
          1,
          2
        ],
        [
          2,
          4
        ],
        [
          4,
          5
        ]
      ]
    }
  ]
}
{
  "records": [
    {
      "id": "a",
      "count": 3,
      "selectedIndices": [
        1,
        2,
        3
      ],
      "selectedIntervals": [
        [
          1,
          2
        ],
        [
          2,
          4
        ],
        [
          4,
          5
        ]
      ]
    }
  ],
  "note": "原数组0基下标;半开[start,end),端点相接可兼容;正长度,按结束、开始、下标确定性选择。只最大化项数,不优化权重、时长或多资源。"
}

原理与实际源码

validated检查顶层、数组规模、字段、唯一标识后复制并按id排序,analyze再按当前规则确定顺序。每条时段数组最多64项,每项为[start,end]非负安全整数且start<end。半开边界允许前一结束等于下一开始,原数组下标从0开始;输出最大项数和贪心见证,不保证所有最优方案或最大总权重。 各函数不依赖全局业务状态,不执行网络请求,不修改调用者输入。以下就是project/src/core.js,页面与报告导入同一个文件,修改代码时必须同步重跑测试和报告,不能只改文稿。

export const META={"id":"20261104-001","title":"生产MCP路由合成清单半开时段最多无重叠选择器","focus":"对显式正长度半开时段按结束时刻贪心选择最多不重叠项,输出可复核下标;不考虑权重、资源容量或真实排程"};
export const CFG={"kind":"slots","source":"routeSource","target":"routeTarget","expression":"routeExpression","text":"routeText","tokens":"routeTokens","matrix":"routeMatrix"};
export const SCHEMA={"id":"string","routeMatrix":"intervals"};
export const SAMPLE={
  "records": [
    {
      "id": "a",
      "routeMatrix": [
        [
          0,
          3
        ],
        [
          1,
          2
        ],
        [
          2,
          4
        ],
        [
          4,
          5
        ]
      ]
    }
  ]
};
function validated(input){
 if(!input||typeof input!=='object'||Array.isArray(input)||!Array.isArray(input.records)||input.records.length>200)throw new TypeError('须提供最多200条records');
 const ids=new Set();return input.records.map(r=>{
  if(!r||typeof r!=='object'||Array.isArray(r))throw new TypeError('记录须为对象');
  for(const[k,t]of Object.entries(SCHEMA)){const v=r[k];
   if(t==='intervals'){if(!Array.isArray(v)||v.length>64||v.some(x=>!Array.isArray(x)||x.length!==2||x.some(y=>!Number.isSafeInteger(y)||y<0)||x[0]>=x[1]))throw new TypeError('时段须至多64个非负安全整数对,开始严格早于结束');}
   else if(t==='smallIntegers'){if(!Array.isArray(v)||v.length>32||v.some(x=>!Number.isInteger(x)||x< -20||x>20))throw new TypeError('子集数组须至多32个[-20,20]整数');}
   else if(t==='sumTarget'){if(!Number.isInteger(v)||v< -640||v>640)throw new TypeError('目标须为[-640,640]整数');}
   else if(t==='dimension'){if(!Number.isInteger(v)||v<0||v>1000)throw new TypeError('维度须为0至1000整数');}
   else if(t==='triples'){if(!Array.isArray(v)||v.length>64||v.some(x=>!Array.isArray(x)||x.length!==3||x.some(y=>!Number.isSafeInteger(y))||x[0]<0||x[1]<0))throw new TypeError('坐标三元组最多64项,安全整数,坐标非负');}
   else if(t==='points'){if(!Array.isArray(v)||v.length>64||v.some(x=>!Array.isArray(x)||x.length!==2||x.some(y=>!Number.isSafeInteger(y))))throw new TypeError('点集须至多64个有符号安全整数坐标对');}
   else if(t==='pattern'||t==='text'){if(typeof v!=='string'||Array.from(v).length>(t==='pattern'?128:256))throw new TypeError('文本类型或长度错误');}
   else if(typeof v!=='string'||!v.trim()||v.length>256)throw new TypeError('id须为非空短字符串');
  }if(ids.has(r.id))throw new RangeError('重复id');ids.add(r.id);return r;
 }).slice().sort((a,b)=>a.id<b.id?-1:a.id>b.id?1:0);
}
export function analyze(input){return{records:validated(input).map(r=>{
 const candidates=r[CFG.matrix].map(([start,end],index)=>({start,end,index})).sort((a,b)=>a.end-b.end||a.start-b.start||a.index-b.index);const selected=[];let lastEnd=null;
 for(const item of candidates)if(lastEnd===null||item.start>=lastEnd){selected.push(item);lastEnd=item.end;}
 return{id:r.id,count:selected.length,selectedIndices:selected.map(x=>x.index),selectedIntervals:selected.map(x=>[x.start,x.end])};
 }),note:'原数组0基下标;半开[start,end),端点相接可兼容;正长度,按结束、开始、下标确定性选择。只最大化项数,不优化权重、时长或多资源。'};}

运行方法与已执行测试

Node.js 18以上,无第三方运行依赖。进入project目录后npm test调用node --test;npm run report生成dist/report.json及转义后的report.html。浏览器运行须先执行python3 -m http.server 8080 --bind 127.0.0.1,再打开http://127.0.0.1:8080,点击运行分析。不要将整个工作区绑定公网,也不要以file协议直接打开模块后将加载失败误报为算法错误。

每包已执行8项测试:专用样本的具体数值和结构、专属边界、错误顶层、缺字段、错误类型、重复标识、输入不可变、换序确定性。真实命令输出在docs/测试输出.txt,断言源码在test/,报告在dist/。这些测试只证明列出的合成场景通过,不是生产性能承诺,更不能用一次成功输出覆盖未测试的输入空间。增加新功能应先给出预期失败的反例,随后实现并更新文档。

浏览器截图验收状态

screenshots/运行效果.jpg来自实际浏览器打开本项目并点击运行的截图,输出已与dist/report.json逐项比对,browser-evidence.json记录捕获时间、源码和图片SHA-256。画面展示项目编号、输入与输出,不是第三方截图或绘制摘要。源码修改后须重新运行补证,旧图片不能为新版本背书。

限制与扩展

对显式正长度半开时段按结束时刻贪心选择最多不重叠项,输出可复核下标;不考虑权重、资源容量或真实排程。本包只实现这一项规则,不能据此声称具有其他算法或真实业务执行能力。每条时段数组最多64项,每项为[start,end]非负安全整数且start<end。半开边界允许前一结束等于下一开始,原数组下标从0开始;输出最大项数和贪心见证,不保证所有最优方案或最大总权重。缺失、错误或未脱敏的原始数据会限制输出解释,工具不恢复漏失记录、不自动决定访问权、不发送回调、不运行外部模型。所有结果由调用者审阅,不能直接驱动付款、处罚、健康判断或攻击行为。

200条输入限制属于交互保护,不是压力测试结果。页面只在内存计算并以textContent展示结果,报告转义尖括号,这并不等同于完整安全审计。公开部署还需认证、权限、日志脱敏、配额和数据保留策略。目前没有持久化、多人协同或流式处理,改变字段单位或边界规则必须同步更新测试、说明与截图证据。

资源与原创授权

源码、README、MIT LICENSE、原创授权说明、合成样本及测试已经生成;真实截图、秘密扫描和ZIP完整性已经验收。公开产品简介只提供需求信号,不含第三方源码、权重、品牌或官方截图。资源采用独立提交轨道,当前未获得平台接受回执,不声称正在审核;没有官方URL时不编造下载地址。资源通过后才回填可核验URL并尝试同名原生卡,普通链接不计为资源卡。

标签:JavaScript、JSON、区间调度

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐