You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从x、y生成的唯一ID反向推导x与y的值?

从生成ID反推原始x和y的方法

首先明确ID的生成逻辑:将整数x、x+y、y分别转为字符串后拼接,再转回整数得到ID,即:

id = parseInt(String(x) + String(x+y) + String(y))

反推的核心是把ID转为字符串后,尝试所有合理的拆分方式,找到满足parseInt(s1) + parseInt(s3) = parseInt(s2)的三个子串s1(对应x)、s2(对应x+y)、s3(对应y)。

具体步骤

  1. 转换ID为字符串
    将目标ID转为字符串形式id_str,比如ID为12153时,id_str = "12153"。

  2. 枚举所有拆分组合
    设s1长度为a,s3长度为b,则s2的长度为len(id_str) - a - b。其中:

    • a的取值范围是1 ≤ a ≤ len(id_str)-2(s2和s3至少各占1位)
    • b的取值范围是1 ≤ b ≤ len(id_str)-a-1(s2至少占1位)

    对每一组(a,b),拆分出:

    • s1 = id_str.slice(0, a)
    • s2 = id_str.slice(a, len(id_str)-b)
    • s3 = id_str.slice(len(id_str)-b)
  3. 验证拆分合法性
    对每组拆分的子串,需同时满足两个条件:

    • 无无效前导零:子串长度大于1时,不能以"0"开头(除非子串本身就是"0",对应x或y为0的情况)
    • 数值匹配:parseInt(s1) + parseInt(s3) === parseInt(s2),这是核心验证条件,确保x+y的数值等于x与y的和。
  4. 输出有效结果
    所有通过验证的(parseInt(s1), parseInt(s3))就是原始的x和y组合。若没有符合条件的拆分,说明该ID并非用给定规则生成。

示例演示

假设ID为12153(由x=12、y=3生成,x+y=15):

  • 尝试a=2、b=1:
    s1="12",s2="15",s3="3"。验证12+3=15,完全匹配,得到x=12、y=3。

再比如ID为055(由x=0、y=5生成,x+y=5):

  • 尝试a=1、b=1:
    s1="0",s2="5",s3="5"。验证0+5=5,符合条件,得到x=0、y=5。

注意事项

  • 理论上可能存在多组(x,y)生成同一ID的极端情况,需输出所有符合条件的组合。
  • 处理x或y为0的场景时,要允许子串为"0",但禁止长度大于1的子串以"0"开头(比如"012"是无效的,因为整数不会以0开头)。

内容的提问来源于stack exchange,提问作者CoreNoob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:50:20