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

如何用JavaScript高效生成Enigma M3合规插板组合?

高效生成Enigma M3插板配置组合(优先短长度)

核心思路

因为正确配置大概率较短,所以按插板对数从小到大顺序生成组合(从0对到10对),每生成一组就可立刻拿去验证,一旦找到正确配置就能提前终止,避免无意义的长组合计算。同时通过约束字母对顺序、避免重复使用字母来减少冗余计算。

关键约束对应实现

  1. 字母不重复:维护动态可用字母池,每选一对字母就从池里移除这两个字母,后续组合仅能从剩余字母中选择
  2. 字符数为偶数:直接按"对数"生成(1对=2字符,2对=4字符…10对=20字符),天然满足偶数要求
  3. 避免重复组合:规定每对字母的第一个字符小于第二个字符(比如只生成ab不生成ba),同时后续字母对的起始字符不小于前一对的起始字符,彻底消除重复组合

JavaScript 实现代码

// 生成符合规则的插板配置,按长度从小到大输出,支持中途验证终止
function generatePlugboardConfigs(validateFn) {
    const allLetters = 'abcdefghijklmnopqrstuvwxyz'.split('');

    // 回溯生成k对字母的组合
    function backtrack(remainingLetters, currentPairs, targetPairs) {
        if (currentPairs.length === targetPairs) {
            const configStr = currentPairs.map(pair => pair.join('')).join(' ');
            // 若传入验证函数,验证通过则直接返回结果终止流程
            if (validateFn?.(configStr)) {
                return { found: true, config: configStr };
            }
            return { found: false, config: configStr };
        }

        for (let i = 0; i < remainingLetters.length; i++) {
            const first = remainingLetters[i];
            for (let j = i + 1; j < remainingLetters.length; j++) {
                const second = remainingLetters[j];
                // 生成新的可用字母池
                const newRemaining = remainingLetters.filter(l => l !== first && l !== second);
                currentPairs.push([first, second]);
                const result = backtrack(newRemaining, currentPairs, targetPairs);
                if (result.found) return result;
                // 回溯,移除当前对
                currentPairs.pop();
            }
        }
        return { found: false };
    }

    // 从0对到10对依次生成
    for (let k = 0; k <= 10; k++) {
        if (k === 0) {
            const emptyConfig = '';
            if (validateFn?.(emptyConfig)) {
                return emptyConfig;
            }
            console.log('当前验证配置:', emptyConfig);
        } else {
            const result = backtrack([...allLetters], [], k);
            if (result.found) {
                return result.config;
            }
        }
    }

    return null;
}

// 示例:自定义验证函数(替换成游戏内的验证逻辑)
function validateConfig(config) {
    // 这里写游戏内的验证逻辑,比如加密测试文本对比结果
    return config === 'bq cr'; // 示例验证条件
}

// 使用示例:生成并验证,找到正确配置后返回
const correctConfig = generatePlugboardConfigs(validateConfig);
console.log('找到正确配置:', correctConfig);

优化技巧

  1. 即时验证提前终止:在回溯终止条件中加入游戏验证逻辑,一旦验证通过立刻返回结果,终止所有递归和后续长度的生成,这是最高效的优化
  2. 内存优化:无需存储所有组合,生成一个验证一个,验证通过直接返回,减少内存占用
  3. 性能优化:可用字母池操作改用splice+回溯恢复,替代filter的数组复制,降低性能开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 15:00:05